scrapy框架笔记,参考官方文档与部分教程,完成一个爬虫程序,爬取了b站的2021年1月番剧数
1. 创建项目
在需要存储的代码目录下输入
1 | scrapy startproject animeRankSpider |
该命令生成如下文件夹结构
1 | |--animeRankSpider |
这些文件分别为:
scrapy.cfg
为scrapy的配置文件items.py
为爬取内容的每个小单元设计,称之为itemmiddlewares.py
为爬虫中间件pipelines.py
为信息处理过程的设计setting.py
为爬虫的一些设置
2. 设计爬虫单元(scrapy中称为item
)
观察b站新番相关数据,我准备爬取的内容为新番标题、弹幕量、播放量、追番人数、排名。
打开items.py
,输入如下内容
1 | import scrapy |
3. 网页分析
爬取的网站为https://www.bilibili.com/v/popular/rank/bangumi
,可以在终端中输入下面的指令帮助分析
1 | scrapy shell "https://www.bilibili.com/v/popular/rank/bangumi" |
例如,在输入时
1 | response.xpath('//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a/text()') |
会有输出
1 | [<Selector xpath='//*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a/text()' data='Re:从零开始的异世界生活 第二季 后半'>] |
也就是说可以根据页面中元素的xpath路径可以找到网页中元素的位置,这正是爬虫所需要的
这里安利一款chrome插件Xpath Helper
,可以帮助分析Xpath
观察两部新番标题的Xpath,分别为
1 | //*[@id="app"]/div[2]/div[2]/ul/li[1]/div[2]/div[2]/a |
可以发现,差别仅在于标签li
后面的系数。经过进一步验证,发现网站的其他内容也有类似的格式
因此分析结果如下,index
代表不同新番的系数,从1开始取值
- 标题格式
//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/a
- 播放量
//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[1]
- 弹幕量
//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[2]
- 追番人数
//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[2]/div[2]/div[2]/span[3]
- 排序
//*[@id="app"]/div[2]/div[2]/ul/li[index]/div[1]
4.爬虫编写
输入命令,引号中内容为爬虫网站的主域名
1 | scrapy genspider animeRankSpider "bilibili.com" |
在animeRankSpider/spiders文件夹下创建了一个py结尾的新爬虫文件,输入如下代码
1 | import scrapy |
5. 运行爬虫
终端中输入命令
1 | scrapy crawl animeRankSpider -o out.csv |
等待片刻,生成的out.csv即为爬虫所得,可以用记事本或者excel打开
代码上传到了百度网盘,链接如下
链接:https://pan.baidu.com/s/1HzjZdmUQ-u7FeapgyAH8vA 提取码:lhvh