博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猫眼电影top100抓取
阅读量:4591 次
发布时间:2019-06-09

本文共 2172 字,大约阅读时间需要 7 分钟。

  

  初级的爬虫,此处不涉及其他解析工具,用的是正则表达式,因为这个是必须要学的,请求网页用的是requests库。

 

#首先导入json、requests、re、time等模块,此处还用到了异常处理。 import jsonimport requestsfrom requests.exceptions import RequestExceptionimport reimport time#首先定义一个方法,将网页源码的请求头信息加入,此处用到了异常处理机制try和except,判断状态码,200就是响应成功的意思,最后返回响应信息。def get_one_page(url):    try:      #请求头的信息可以在网页源代码中找到        headers = {            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'        }        response = requests.get(url, headers=headers)      #此处判断响应的状态码        if response.status_code == 200:            return response.text        return None    except RequestException:        return None #这里我们再定义一个方法,这个方法中用到的就是正则表达式,用于匹配你上文中接收到的源码信息,解析出你想要的东西,再加入一个生成器,依次输出得到的结果。def parse_one_page(html):    #正则表达式匹配,我们首先要定义一个正则匹配的方法,然后下面用到的findall中传入的参数,第一个是我们定义的正则匹配方法,第二个就是我们爬下来的源代码    pattern = re.compile('
.*?board-index.*?>(\d+).*?data-src="(.*?)".*?name">
(.*?).*?star">(.*?)

.*?releasetime">(.*?)

' + '.*?integer">(.*?).*?fraction">(.*?).*?
', re.S) items = re.findall(pattern, html)    #此处是一个生成器 for item in items: yield { 'index': item[0], 'image': item[1], 'title': item[2], 'actor': item[3].strip()[3:], 'time': item[4].strip()[5:], 'score': item[5] + item[6] } #我们将匹配好的内容写入文件,ensure_ascii=False用于保证输出的是中文而不是unicode编码。json库的dumps()方法实现字典序列化def write_to_file(content): with open('result.txt', 'a', encoding='utf-8') as f: f.write(json.dumps(content, ensure_ascii=False) + '\n') #这里我们可以看到,猫眼电影在翻页的时候,它的url除了最后一个offset在变,前面的都没有变,所以此处可以在url后面加一个offset变量,用于翻页。def main(offset): url = 'http://maoyan.com/board/4?offset=' + str(offset) html = get_one_page(url) for item in parse_one_page(html): print(item) write_to_file(item) #由于猫眼电眼的一页只展示10部电影,所以我们要做一个for循环,最后执行。if __name__ == '__main__': for i in range(10): main(offset=i * 10) time.sleep(1)

 

posted on
2018-09-13 17:39 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/houziaipangqi/p/9641978.html

你可能感兴趣的文章
c# 调试
查看>>
c# 使用序列化
查看>>
c# VS.NET 中的调试工具
查看>>
c# System.Array
查看>>
c# StringBuilder类
查看>>
c# 格式化数据String.Format
查看>>
c# 日期和时间System.DateTime
查看>>
c# 字符串修改
查看>>
c# 正则表达式
查看>>
c# Regex类
查看>>
c# Match类
查看>>
c# MatchCollection类
查看>>
c# Group类
查看>>
c# FileStream 类构造函数
查看>>
H3C 帧聚合
查看>>
H3C WLAN相关组织和标准
查看>>
H3C 802.11网络的基本元素
查看>>
redis Set相关命令
查看>>
基于物品的协同过滤(ItemCF)
查看>>
基于用户的协同过滤(UserCF)
查看>>