Spider的用法
spider的运行流程
- 定义爬取网站的动作
- 分析爬取下来的网页
爬取循环过程
Downloader Middleware的用法
Downloader Middleware在整个架构中起作用的位置是两个。
1.在Scheduler调度出队列的Request发送给Downloader下载之前
2.在下载后生成的Response发送给Spider之前,也就是可以在生成Response被Spider解析之前对其进行修改
Downloader Middleware的核心方法
- process_request(request,spider):参数request,spider
- process_response(request,response,spider):参数request,response,spider
- process_exception(request,exception,spider)
只需要实现至少一个方法,就可以定义一个Downloader Middleware
Downloader Middleware实例
新建项目
新建Spider
修改Spider httpbin.py
修改请求时的User-Agent可以通过Downloder Middleware实现一个随机User-Agent的设置
在middlewares.py里面添加一个RandomUserAgentMiddleware的类
class RandomUserAgentMiddleware():
def __init__(self):
self.user_agents=[
'Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)',
'Mozilla/5.0 (windows NT 6.1) AppleWebKit/537.2 (KHTML,like Gecko) Chrome/22.0.1216.0 Safari/537.2',
'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1'
]
def process_request(self,request,spider):
request.headers['User-Agent']=random.choice(self.user_agents)
Spider Middleware的用法
-
在Response发送给Spider之前对Response进行处理
-
在Request发送给Scheduler之前对Request进行处理
-
在Item发送给Item Pipeline之前对Item进行处理
核心方法 -
process_spider_input(response,spider):当Response被Spider Middleware处理时 3
-
process_spider_output(response,result,spider):当Spiderchuli Response返回结果时必须返回包含Request或Item对象的可迭代对象 4
-
process_spider_exception(response, exception,spider): 当Spider或Spider Middleware的process_spider_input()方法抛出异常时,必须没么返回None,要么返回一个包含Response或Item对象的可迭代对象5
-
process_start_requests(start_requests,spider):以Spider启动的Request为参数被调用,执行的过程类似于process_spider_output(),他没有相关联的Response,并且必须返回Request 6
只需要实现其中一个方法就可以定义一个Spider Middleware
一种返回结果经处理后保存,一种解析得到下一个链接,可以利用此链接构造Request并设置新的回调函数 ↩︎
-
- 返回字典或Item对象,可通过Feed Exports等组件将返回结果存入文件,如果有pipeline就用它处理 2.返回Request,执行后得到response被传递给Request中定义的回调函数,在回调函数中
包含两个参数:response,spider ↩︎
包含三个参数:response,result,spider ↩︎
包含三个参数:response,exception,spider ↩︎
包含两个参数:start_requests,是包含Request的可迭代对象。spider ↩︎