中间件
位置:middlewares.py文件中
一、爬虫中间件
二、下载中间件
1、位置:引擎和下载器之间
2、作用:批量拦截到整个工程中所有的请求和响应
3、拦截请求:
UA伪装:写在process_request方法中
# UA池 user_agent_list = [ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 " "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 " "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 " "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 " "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 " "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 " "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5", "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 " "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3", "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 " "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 " "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 " "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24" ]
# 拦截请求 def process_request(self, request, spider): # UA伪装 request.headers[‘User-Agent‘] = random.choice(self.user_agent_list) return None
代理IP :写在process_exception方法中,最后需要return request
# 可被选用的代理IP PROXY_http = [ ‘126.120.102.124:80‘, ‘101.208.131.169:56055‘, ] PROXY_https = [ ‘20.83.49.90:900‘, ‘91.182.12.212:3508‘, ]
# 拦截发生异常的请求 def process_exception(self, request, exception, spider): if request.url.split(‘:‘)[0] == ‘http‘: # 代理ip request.meta[‘proxy‘] = ‘http://‘ + random.choice(self.PROXY_http) else: request.meta[‘proxy‘] = ‘https://‘ + random.choice(self.PROXY_https) return request # 将修正之后的请求对象进行重新的请求发送
4、拦截响应:
篡改响应数据,响应对象
需求:爬取网易新闻中的新闻数据(新闻标题、内容)
- 通过网易新闻的首页解析出板块对应的详情页的url(没有动态加载)
--如何判断是否动态加载,通过抓包工具查看请求url的response,搜索相关内容,如果查找得到则不是动态加载,反之是动态加载
- 每一个板块对应的新闻标题都是动态加载出来的(动态加载)
- 通过解析出每一条新闻详情页的url获取详情页的页面源码,解析出新闻内容
相关推荐
liuweiq 2020-07-08
ZHANGRENXIANG00 2020-06-09
marisafari 2020-05-29
jiaguoquan00 2020-05-27
fanhuasijin 2020-04-17
juanjuanwang 2020-03-23
81224450 2020-01-24
程序员俱乐部 2020-01-11
Safari浏览器 2019-12-14
88961137 2019-12-09
marisafari 2019-10-26
longzhiwen 2020-10-16
tkernel 2020-08-18
lihn 2020-08-18
Colourful 2020-07-03
sunzhihaofuture 2020-06-10
fangjack 2020-06-02