开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
Scrapy四
一,Request
-
meta传参(实现不同回调方法之间数据的传递)
-
dont_filter不过滤(实现请求相同url不会被过滤)
-
POST请求(进行模拟登陆)
二,GitHub登录
抓包最好是在无痕窗口(没有任何缓存和cookies数据)- 分析登录的请求,哪些参数是固定的,哪些参数是变化的(多抓几次包对比提交的参数)
- 获取变化的参数,构造data数据包,用于POST请求提交
三,Response
- 源码
四,日志使用
-
直接在回调函数里面写
-
setting.py里面设置,全部储存在文件里LOG_FILE = "log.log" # 储存的文件 LOG_LEVEL = 'DEBUG' # 设置日志的等级(DEBUG文件很多)
Scrapy五
一,下载中间件
-
位于 引擎 和 下载器 之间(作用类似于Fiddler,可以对request和response进行修改)
在
setting.py里面激活下载中间件 -
在process_request里对request进行添加
headerscookiesproxy池-
添加
headers -
添加
cookiesreque.cookie = {} -
添加
proxyip = '127.198.25.1' port = '888' request.proxy = 'http://{}:{}'.format(ip, port)
-
-
在process_response里对response进行操作(假设请求的时候ip被封了,换ip继续加入队列请求)
-
对请求失败的请求进行操作
if response.status_code in [403, 404, 500]: # 删除被封的ip return request # 把这个request重新加入队列,换一个ip继续请求
-
-
内置下载中间件
如果不想向服务端发送
cookies数据,把COOKIES_ENAVLED = True,默认为True
二,自定义User-Agent
-
在
setting.py里面写一个User-Agent列表 -
编写中间件
代码逻辑:在
setting.py里面定义好代理池,这个中间键会通过from_crawler这个方法读取setting.py里面的代理池生成实例以便我们使用MY_USER_AGENT = [ "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; CrMY_OS 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" ]class RandomUserAgentMiddleware(object): def __init__(self, user_agents): self.user_agents = user_agents @classmethod def from_crawler(cls, crawler): s = cls(user_agents=crawler.settings.get("MY_USER_AGENT")) return s def process_request(self, request, spider): agent = random.choice(self.user_agents) request.headers['User-Agent'] = agent return Nonedef open_spider(self, spider): print('------------------爬取开始--------------------') self.f = open('课程信息.json', 'w', encoding='utf-8') def close_spider(self, spider): print('------------------爬取结束--------------------') self.f.close()
三,项目常用设置
- 设置优先级
setting.py里面常用的设置
四,对接selenium
-
selenium介绍
本是用来自动化测试的(若和python.exe同步录下有chromdriver.exe这个软件,则不需要路径)
-
利用selenium对经过的请求进行自动化解密操作(通过给meta值来判断,请求是否需要)
-
下载中间键的数字(100~900)
-
spider代码
-
下载中间键的数字(100~900)