python
爬虫我认为最困难的问题一个是ip代理,另一个就是模拟登陆了,更操蛋的就是模拟登陆了以后还有验证码,真的是不让人省心,不过既然有了反爬虫,那么就有反反爬虫的策略,这里就先介绍一个cookie模拟登录,后续还有seleminum+phantomjs
模拟浏览器登陆的文章。还不知道cookie是什么朋友们,能够点击这里pythoncookie提取方法:
打开谷歌浏览器或者火狐浏览器,若是是谷歌浏览器的按
F12
这个键就会跳出来浏览器控制台,而后点击Network
,以后就是刷新网页开始抓包了,以后在抓到的页面中随便打开一个,就能看到cokie了,可是这里的cookie并不符合python中的格式,所以须要转换格式,下面提供了转换的代码git
# -*- coding: utf-8 -*- class transCookie: def __init__(self, cookie): self.cookie = cookie def stringToDict(self): ''' 将从浏览器上Copy来的cookie字符串转化为Scrapy能使用的Dict :return: ''' itemDict = {} items = self.cookie.split(';') for item in items: key = item.split('=')[0].replace(' ', '') value = item.split('=')[1] itemDict[key] = value return itemDict if __name__ == "__main__": cookie = "你复制的cookie" trans = transCookie(cookie) print trans.stringToDict()
补充说明:
只须要将你网页上的cookie复制到上述代码中直接运行就能够了github
使用cookie操做scrapy
直接撸代码
# -*- coding: utf-8 -*- import scrapy from scrapy.conf import settings #从settings文件中导入Cookie,这里也能够室友from scrapy.conf import settings.COOKIE class DemoSpider(scrapy.Spider): name = "demo" #allowed_domains = ["csdn.com"] start_urls = ["http://write.blog.csdn.net/postlist"] cookie = settings['COOKIE'] # 带着Cookie向网页发请求\ headers = { 'Connection': 'keep - alive', # 保持连接状态 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36' } def start_requests(self): yield scrapy.Request(url=self.start_urls[0],headers=self.headers,cookies=self.cookie)# 这里带着cookie发出请求 def parse(self, response): print response.body
说明
这里是scrapy工程目录下spiders目录下的主要的解析网页的py文件相信学过scrapy的应该不会陌生,上述代码中的cookie值是放在Settings文件中的,所以使用的时候须要导入,固然你也能够直接将cookie粘贴到这个文件中浏览器
注意
虽然说这里使用直接使用cookie能够省去不少麻烦,可是cookie的生命周期特别的短,不太小型的项目足够使用了,向那些须要爬两三天甚至几个月的项目就不适用了,所以在隔一段时间就要从新换cookie的值,虽然说有不少麻烦,可是我仍是比较喜欢这种方法的,由于能够省去很多脑筋cookie
做者说
本人秉着方便他人的想法才开始写技术文章的,由于对于自学的人来讲想要找到系统的学习教程很困难,这一点我深有体会,我也是在不断的摸索中才小有所成,若是大家以为我写的不错就帮我推广一下,让更多的人看到。另外若是有什么错误的地方也要及时联系我,方便我改进,谢谢你们对个人支持。架构
最后欢迎你们看看个人其余scrapy文章