Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

时间:2022-09-18 18:38:15


       通过使Scrapy框架,掌握如何使用Twisted异步网络框架来处理网络通讯的问题,进行数据挖掘和对web站点页面提取结构化数据,可以加快我们的下载速度,也可深入接触各种中间件接口,灵活的完成各种需求,使得我们的爬虫更强大、更高效。  


一、项目分析

      豆瓣电影网页爬虫,要求使用scrapy框架爬取豆瓣电影 Top 250网页(https://movie.douban.com/top250?start=0)上所罗列上映电影的标题、主要信息、评分和电影简介等的信息,将所爬取的内容保存输出为CSV和JSON格式文件,在python程序代码中要求将所输出显示的内容进行utf-8类型编码。

1. 网页分析

    对于本例实验,要求爬取的豆瓣电影 Top 250网页上的电影信息,显而易见,网页( https://movie.douban.com/top250?start=0)的页面布局结构可如图2-1所示: 

Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图1-1 所要爬取的信息页面布局

使用xpath_helper_2_0_2辅助工具,对其中上映电影的标题、主要信息、评分和电影简介等的信息内容进行xpath语法分析如下:

标题://div[@class='info']//span[@class='title'][1]/text()

信息://div[@class='info']//div[@class='bd']/p[@class='']/text()

评分:.//div[@class='bd']/div[@class='star']/span[@class='rating_num']/text()

简介://div[@class='info']//div[@class='bd']/p[@class='quote']/span/text()


2. url分析

       获取url进行解析移交给scrapy,而对于request类,含有的参数 url 与callback回调函数为parse_details。出现搜索到的url不全,加上当前目录的url拼接,采用prase.urljoin(base,url),最后获取下一页url交给scrapy ,再用Request进行返回。

      换句话说,Spiders处理response时,提取数据并将数据经ScrapyEngine交给ItemPipeline保存,提取url重新经ScrapyEngine交给Scheduler进行下一个循环。直到无Url请求程序停止结束。



二、项目工具

       Python 3.7.1       、 JetBrains PyCharm 2018.3.2        其它辅助工具:略


三、项目过程

(一)使用Xmind工具对Python爬虫程序(网络爬虫)流程图进行分析,绘制如图3-1所示的程序逻辑框架图:

Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图3-1 程序逻辑框架图

 

  (二)爬虫程序调试过程BUG描述(截图)

Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图3-2 爬虫程序BUG描述①


Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图3-3 爬虫程序BUG描述②


(三)爬虫运行结果

Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图3-4 爬虫程序输出运行结果1


Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图3-5 爬虫程序输出文件


四、项目心得

  关于本例实验心得可总结如下:

1、 当Scrapy执行crawl命令报错:ModuleNotFoundError: No module named ***时,应该首先检查Project Interpreter是否为系统安装的python环境路径,如图4-1所示:

Scrapy项目 - 实现豆瓣 Top250 电影信息爬取的爬虫设计

图4-1 检查Project Interpreter路径

2、 schelduler会按照一定的次序取出请求,经由引擎, 下载器中间键,发送给下载器dowmloader 这里的下载器中间键是设定在请求执行前,因此可以设定代理,请求头,cookie等

3、 spider打开某网页,获取到一个或者多个request,经由scrapy engine传送给调度器scheduler request特别多并且速度特别快会在scheduler形成请求队列queue,由scheduler安排执行