⑴ python之scrapy爬虫(西刺,豆瓣top250)
使用Scrapy框架构建西刺和豆瓣Top250爬虫的关键步骤:
项目初始化:
定义爬取项目内容:
编写爬取逻辑:
配置爬虫行为:
处理爬取后的数据:
运行爬虫:
监控与调试:
注意事项: Scrapy默认支持Python 2.7,若使用Python 3.x版本,可能需要对源代码进行相应修改。 构建爬虫时,务必遵守目标网站的robots.txt协议和法律法规。 为了避免对目标网站造成过大压力,应合理设置下载延迟和并发请求数量。
⑵ 爬虫实战二:爬取电影天堂的最新电影
前两篇文章讲述了 requests 和 xpath 的使用方法。为了实践所学,本文将介绍如何使用这两个工具进行实战。
1 爬取目标
本次目标为爬取电影天堂(网址:ydtt8.net)站点的所有电影信息,包括电影名称、导演、主演、下载地址等。具体抓取信息如图所示:
2 设计爬虫程序
2.1 确定爬取入口
电影天堂电影种类繁多,数量庞大,为了确保爬取的电影信息不重复,我们需要确定一个爬取方向。点击主页中的【最新电影】选项后,我们会进入一个新页面,这时会有一种豁然开朗的感觉。
如图所示,电影天堂有5个电影栏目,分别为最新电影、日韩电影、欧美电影、国内电影、综合电影。每个栏目都有一定数量的分页,每个分页包含25条电影信息。因此,程序的入口可以有5个URL地址,分别对应每个栏目的首页链接。
2.2 爬取思路
了解爬取入口后,后续工作就变得容易了。通过测试,我发现这几个栏目除了页面的URL地址不同之外,其他如提取信息的xpath路径是一样的。因此,我将5个栏目视为一个类,并进行遍历爬取。
以“最新电影”为例,说明爬取思路:1)请求栏目的首页,获取分页总数和每个分页的URL地址;2)将获取到的分页URL存放到名为floorQueue的队列中;3)依次从floorQueue中取出分页URL,利用多线程发起请求;4)将获取到的电影页面URL存入名为middleQueue的队列;5)依次从middleQueue中取出电影页面URL,再利用多线程发起请求;6)使用xpath解析请求结果并提取所需的电影信息;7)将爬取到的电影信息存到名为contentQueue的队列中;8)依次从contentQueue中取出电影信息,然后存入数据库中。
2.3 设计爬虫架构
根据爬取思路,我设计出爬虫架构,如图所示:
2.4 代码实现
主要阐述几个重要的类的代码。主要工作有两个:第一,实例化一个dytt8Movie对象,然后开始爬取信息。第二,等爬取结束,将数据插入到数据库中。
处理爬虫的逻辑代码如下:
创建数据库以及表,再将电影信息插入到数据库的代码如下:
维护floorQueue、middleQueue、contentQueue三个队列的管理类。选择队列的数据结构是因为爬虫程序需要用到多线程,队列能够保证线程安全。
dytt8Movie类是本程序的主心骨。程序最初的爬取目标是5个电影栏目,但目前只实现了爬取最新栏目。如果你想爬取全部栏目电影,只需对dytt8Movie稍作修改即可。
getMovieInformations方法主要负责解析电影信息节点并将其封装成字典。因为电影天堂的电影详情页面排版参差不齐,所以单单一条内容提取表达式、海报和影片截图表达式、下载地址表达式远远无法满足。
选择字典类型作为存储电影信息的数据结构,是在爬坑之后决定的。这也是该站点另一个坑人的地方。电影详情页中有些内容节点是没有的,例如类型、豆瓣评分,所以无法使用列表按顺序保存。
3 爬取结果
这里展示了自己爬取最新栏目中4000多条数据的前部分数据。
最后附上源代码,下载地址:源代码地址