首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >爬取TOP100的电影

爬取TOP100的电影

作者头像
stormwen
发布2019-08-05 11:10:04
4110
发布2019-08-05 11:10:04
举报
文章被收录于专栏:公众号:googpy公众号:googpy

阅读文本大概需要 5 分钟。

最近在学习requests库和正则表达式,今天就利用这两个知识点来抓取猫眼电影TOP100的相关内容。

1.确定爬取目标

提取出猫眼电影TOP100的电影名称、时间、评分、图片等信息,提取的URL为:http://maoyan.com/board/4,提取的结果以文件形式保存下来。

2.前期准备

本项目需要用到requests库,请确保已经正确安装好了requests库,如果没有安装,可以用pip指令进行安装,非常简单,这里就不再详细叙述了。

打开URL后,可以看到排名第一的是「霸王别姬」,可以看到页面显示的有效信息有电影名字、主演、上映时间、上映地区、评分、图片等信息。

3.“种子”的分析,生成爬虫入口

现在需要确定正则表达式,在谷歌浏览器,打开开发者选项(F12),查看其中的一个条目的源代码,如图所示。

首先,我们先提取它的排名信息,它的排名信息是class为board-index的i节点内,这里利用非贪婪匹配来提取i节点内的信息,正则表达式如下:

<dd>.*?board-index.*?>(\d+)</i>.*?

然后,提取它的图片信息,正则表达式改写为:

<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)"

再提取电影名字,它在p节点内,class为name。所以,用name做一个标志位,然后进一步提取其内a节点的正文内容,此时表达式变为:

<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'

最后,用同样的原理,提取主演、发布时间、评分等内容,此时,正则表达式为:

<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
                         + '.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                         + '.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
4.写入文件

我们最后需要将提取的结果写入文件,这里直接写入到一个文本文件中。通过JSON库的dumps()方法实行字典的序列化,并指定ensure_ascii参数为False,这样可以保证输出结果是中文形式而不是Unicode编码。代码如下:

def write_to_file(content):
    with open('result.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')

5.需要注意

adb 命令还是比较方便的,我们可以直接用 adb 命令中的截图方法,格式如下。

如果,我们按上面的思路,只能提取到首页的信息。我们将网页滚动到最下方,可以发现有分页列表,点击第2页,可以发现此时页面的URL变成了http://maoyan.com/board/4?offest=10,比之前的URL多了一个参数,那就是offest=10,而目前显示的结果是排行11~20名的电影,初步推断这是一个偏移量参数。

当我们点击第3页时,参数offest=20。所以,如果要想提取TOP100电影,只需要分开请求10次,而10次的offest参数分别设置为0、10、20…90即可。

所以,当我们提取目标时,还需要遍历,给这个链接传入offest参数,实现其他90部电影的爬取,此时添加如下调用即可:

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)

6.整合代码

最后,运行代码,可以看到,电影信息也已经全部保存到了文本文件中了。

感兴趣的小伙伴,后台回复「电影」获取项目源码,可以学习一下。通过这个简单的爬虫实例,可以帮助我们更好的理解requests库和正则表达式。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.确定爬取目标
  • 2.前期准备
    • 3.“种子”的分析,生成爬虫入口
      • 4.写入文件
      • 5.需要注意
      • 6.整合代码
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档