问题描述
比如像百度,知乎等必须要登录才可以爬取信息的网站,我们必须要模拟自己的账号进行登录。
Cookie在百度百科中的解释是:
是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息
通俗点说,Cookie就是网站服务器验证登录的一种手段,第一次登录分配一个Cookie代码。Cookie代码有一定的期限,超过规定的期限就会失效,必须重新登陆;但如果在Cookie规定的期限内,就可以免登录。
只要我们把自己的Cookie代码拷贝下来,就可以爬取相关网页的信息。
Cookie在哪里?
以知乎登录为例
打开知乎的官网并登录自己的账号
按下F12键查看源代码
在请求标头中可以看到对应的user-Agent 和 Cookie的相关参数。
拷贝这两个键值对
Cookie和user-Agent都是在请求页面时使用的,所以在创建请求对象的时候就要传入这两个参数
from urllib import request
url = "http://www.zhihu.com/"
headers = {
"user-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362",
"Cookie":"HMVT=d8bfb560f8d03bbefc9bdecafc4a4bf6|1588678558|4d9c0095d55f98245e83c4b5879def56|1588679068|; HMACCOUNT=6AE3D2C06A2F884A; BDRVFR[SL8xzxBXZJn]=mk3SLVN4HKm; BDRCVFR[8gzLr2xelNt]=IdAnGome-nsnWnYPi4WUvY; session_id=1588678434781; session_name=www.baidu.com; ZD_ENTRY=baidu; BAIDUID=5553F057D752122CF0241A3100A88A7F:FG=1; BIDUPSID=3AD95C55E34E1F69FC092606BE26900F; PSTM=17619754; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; BDUSS=5wRHlkTmRNQzhwQlY0cHIzQ1VBd2l-QVZpeXUtMjFNQTFWY01RT1pVaUREOXBlRUFBQUFBJCQAAAAAAAAAAAEAAAB-M2~oYmluZnRtMzIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIOCsl6DgrJeZ3"
}
req = request.Request(url, headers=headers)
response = request.urlopen(req).read().decode()
print(response)
ok
大功告成,可以登录自己的账号了,账户名是binftm32,如下图: