使用scrapy框架,设计两个爬虫脚本对我们需要的数据分别进行爬取。
对于电影短评的爬取,首先定义它的item,包含name和comment_url两个元素,comment_url存储着(用户url:评论)的字典元素。
写一个管道进行数据处理,由于存在字典列表,选择用json格式存储。
我提前从网上获取了豆瓣top250的电影id存储在movie_id.out文件中,在start_requests中进行读取并调用movie_parse进行爬取。原本网页默认的电影短评页面只有20个短评,需要翻页。我通过观察发现它的url包含一个规定短评数量的正则表达式,通过手动修改为“limit=100”可以让页面直接显示100条短评。
爬取需要的数据并返回给管道处理。
设计用户喜好数据的item。name为电影名,comment为该用户的短评,like为爬取到的用户喜欢的电影。
编写一个类似的管道来处理数据。
由于爬取用户喜好时,用户的“广播”页面只有20条广播,如果一页中爬取到的喜爱的电影数量不够则需要翻页操作,因此需要用类属性变量存储爬取的进度。写一个初始化函数来从movie.json中获取数据,同时初始化这些变量。Start_request就不展示了。
用户的广播页面在数据展示完后仍能继续向后翻页,但没有广播数据,因此先进行判断。若没有广播数据了,则说明这个用户已经爬取完毕;若仍有数据,则进行爬取,判断喜爱电影的数量是否达标(4个),若不达标则使p+1,爬取下一页。爬取完毕后生成item并交给管道,从comment_url列表中获取下一个用户。
github项目地址:HhhhhHans/spider (github.com)