文章目录
上篇
1. scrapy 模拟登录[重点]
scrapy 请求直接携带 cookie:
爬虫的父类中有一个
start_requests
方法,该方法使用起始 url 地址构造请求对象给引擎,但是请求时不会携带 cookie 数据。如果爬虫的起始 url 地址是登录之后才能访问的地址,则需要重写
start_requests
方法。
scrapy 发送 POST 请求:
scrapy 自动定位表单构造请求对象:
2. scrapy 数据管道[重点]
数据管道使用的注意点:
- 使用之前需要在
settings
中开启- pipeline在setting中键表示位置(即pipeline在项目中的位置可以自定义),值表示距离引擎的远近,越近数据会越先经过:权重值小的优先执行
- 有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值
- pipeline中
process_item
的方法必须有,否则item没有办法接受和处理process_item
方法接受item和spider
,其中spider表示当前传递item过来的spideropen_spider(spider)
:能够在爬虫开启的时候执行一次close_spider(spider)
:能够在爬虫关闭的时候执行一次- 上述俩个方法经常用于爬虫和数据库的交互,在爬虫开启的时候建立和数据库的连接,在爬虫关闭的时候断开和数据库的连接
3. crawlspider爬虫
作用:根据指定的 rule 规则,自动从响应中提取 url 地址,然后自动构造请求对象给引擎。
创建 crawlspider 爬虫:
# scrapy genspider -t crawl 爬虫名称 允许抓取的域名范围
scrapy genspider -t crawl crawl_job 163.com
下篇
1. crawlspider爬虫[重点]
网易163 job示例:
2. scrapy 中间件
scrapy 中间件分为:爬虫中间件和下载中间件,可以预处理请求对象和响应对象,主要使用下载中间件。
下载中间件中的方法:
process_request(self, request, spider)
:
- 当每个request通过下载中间件时,该方法被调用。
- 返回None值:没有return也是返回None,该request对象传递给下载器,或通过引擎传递给其他权重低的下载中间件的process_request方法
- 返回Response对象:不再请求,把response返回给引擎
- 返回Request对象:把request对象通过引擎交给调度器,此时将不通过其他权重低的下载中间件的process_request方法
process_response(self, request, response, spider)
:
- 当下载器完成http请求,传递响应给引擎的时候调用
- 返回Resposne:通过引擎交给爬虫处理或交给权重更低的其他下载中间件的process_response方法
- 返回Request对象:通过引擎交给调取器继续请求,此时将不通过其他权重低的下载中间件的process_request方法
3. 示例:随机设置请求头的User-Agent(重点)
4. 示例:设置请求使用代理 IP[重点]
5. 示例:腾讯招聘信息抓取[重点]
注意:腾讯招聘页面 html 源代码中没有职位的信息,职位的信息是通过其他请求获取然后填充到页面上的。
此处可以定义下载中间件,借助 selenium 访问 url,获取渲染之后的内容并返回响应对象。