版权声明:未经本人同意,禁止转载。 https://blog.csdn.net/qq_34022601/article/details/88700943
1.当安装browsercookie后,建立项目(browser_cookie)
yh@yh-PC:~/python$ scrapy startproject browser_cookie
...
yh@yh-PC:~/python$ cd browser_cookie
yh@yh-PC:~/python/browser_cookie$ scrapy genspider example example.com
...
2.创建好项目后,进入项目目录后
修改middlewares.py
添加以下代码:
import browsercookie
from scrapy.downloadermiddlewares.cookies import CookiesMiddleware
### My define
class BrowserCookiesMiddleware(CookiesMiddleware):
def __init__(self,debug=False):
super().__init__(debug)
self.load_browser_cookies()
def load_browser_cookies(self):
jar=self.jars['chrome']
chrome_cookies=browsercookie.chrome()
for cookie in chrome_cookies:
jar.set_cookie(cookie)
#jar=self.jars['firefox']
#firefox_cookeis=browsercookie.firefox()
#for cookie in firefox_cookeis:
# jar.set_cookie(cookie)
注:
我没有firefox浏览器,所以注释了获取firefox中cookies的代码。
如果读者想要使用firefox浏览器,删去注释即可。
3.修改settings.py,加入以下代码
USER_AGENT='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
DOWNLOADER_MIDDLEWARES ={
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 200,
'browser_cookie.middlewares.BrowserCookiesMiddleware':300
}
注:
我们暂时不需要在为example.py(爬虫文件)增加特殊代码,我们只是利用这个项目,来实现cookie模拟登录
4.再次进入命令行
yh@yh-PC:~$ cd python/browser_cookie
yh@yh-PC:~/python/browser_cookie$ scrapy shell
...
...
>>> from scrapy import Request
>>> url='https://space.bilibili.com/******' ###填写自己的主页
>>> fetch(Request(url,meta={'cookiejar':'chrome'}))
2019-03-20 22:02:43 [scrapy.core.engine] INFO: Spider opened
2019-03-20 22:02:43 [scrapy.core.engine] DEBUG: Crawled (404) <GET https://space.bilibili.com/robots.txt> (referer: None)
2019-03-20 22:02:43 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://space.bilibili.com/*******> (referer: None)
>>> view(response)
###这里会跳转到浏览器
>>> response.xpath('//meta[@name="description"]/@content').extract()[1]
[ '******,未来的程序员\n热爱注入灵魂,bilibili是国内知名的视频弹幕网站,这里有最及时的动漫新番,最棒的ACG氛围,最有创意的Up主。大家可以在这里找到许多欢乐。']
到此我们就已经尝试了使用chrome cookies登录B站,并爬到了自己个人信息。
5.如果你在爬去其他网站时,可能会出现这样的情况:
>>> fetch(Request(url,meta={'cookiejar':'chrome'}))
2019-03-20 22:13:59 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.zhihu.com/robots.txt> (referer: None)
2019-03-20 22:13:59 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET https://www.zhihu.com/people/austinbu-zhi-suo-yun/activities>
对,你被知乎的robots协议禁止访问。
这时,你可以修改项目的settings.py,将
ROBOTSTXT_OBEY = True
更改为:
ROBOTSTXT_OBEY = False
这样表示你的爬虫程序将不在遵守网站的robots协议。
注:不要滥用此方法,为网站造成不必要的麻烦