创建crawlscrapy的模版:
>>>scrapy genspider --list
![](https://img.haomeiwen.com/i1878029/812b4ee609e1b6bb.png)
其中crawl模版就是本次用于编写全站爬虫所用。
![](https://img.haomeiwen.com/i1878029/5bb81a7289993c8f.png)
使用该模版创建爬虫的命令:
>>>scrapy genspider -t crawl XXX(脚本名) XXX(目标网站域名)
于是在spiders下出现量一个脚本:
![](https://img.haomeiwen.com/i1878029/33b785fd75e76cde.png)
在settings.py中将项目的根目录插入python的环境变量中,方便后面路径的引用等操作。
![](https://img.haomeiwen.com/i1878029/8999fec5c18ef839.png)
编写Rule
打开spider下的脚本,填充Rule部分的内容,Rule的作用是用正则表达式匹配对应的URL并进行回调,可以是一个正则表达式字符串或者是一个正则表达式元组:
![](https://img.haomeiwen.com/i1878029/5c3ed21e1bd51f88.png)
然后在main.py中启动脚本
编写Items
在items.py中构造一个对应的数据类:
![](https://img.haomeiwen.com/i1878029/c5ceeb9b75e9be8e.png)
为Item配置数据
打开spider下的脚本,引入item并配置好数据。
![](https://img.haomeiwen.com/i1878029/3019b8efbe9f6e92.png)
selenium加载动态页面
将Selenium集成到scrapy
配置中间键
在middlewares.py中引入selenium,用于处理特定的页面,并返回一个response
![](https://img.haomeiwen.com/i1878029/10f880e12690dd66.png)
别忘了在settings.py中设置一下:
![](https://img.haomeiwen.com/i1878029/194d308f13583fc5.png)
优化一下,我们可以把selenium启动浏览器后的状态写到一个类实例的初始化函数里,这样以后就不需要频繁启动浏览器了:
![](https://img.haomeiwen.com/i1878029/2152e3c4677f20dc.png)
但是这样做后还是有一个小问题,就是浏览器访问页面完成后,spider都finished了,浏览器却没有关闭。基于此,我们进一步优化一下,把浏览器打开的过程直接写到spider里面。然后在middlewares.py中把self.broswer改成spider.broswer。
scrapy-splash加载动态页面:
scrapy自带一个加载动态页面的工具,scrapy-splash。
网友评论
```
code ...
```