假设一个网站是由 主页-->登录页面-->搜索页面-->信息页面 组成,而我们的数据是在 信息页面 中
登录的目的分为两种
虽然说各个网站的登录操作各有不同,各大网站为了防止爬虫可谓是无所不用其极,但是在Web系统中,能维持登录状态只有两种:Cookies和Session(这里如果你有过web开发经验就很好理解),那么我们只要模拟出服务器想要识别出的Cookie和对应的值就可以给服务器一种已经登录的‘错觉’。但是总是需要登录一次才能获得登录过后产生的Cookies。所以接下来的问题就是如何登录。
让各位望而却步的无非不就是登录时的验证码。其实网上有很多公开的策略,例如识别图片验证码、自动滑动验证码。最难的不过是手机验证码。
但是我要说的并不是这些方法。
现如今在国内网络环境下,BAT就像是一个大的生态圈,他们手中攥着大量的用户,所有很多网站为了降低网站门槛,常与他们合作,就像我们常常可以看到使用QQ登录,或者微信登录、淘宝登录,诸如此类。所以我们完全可以通过直接访问这些接口登录,并且网上针对这些网站的自动登录策略可谓非常成熟。
'Host': 'search.originoo.cn',
'User-Agent':' Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0',
'Accept':' application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Referer':' http://www.originoo.com/ws/p.topiclist.php?cGljX2tleXdvcmRzPeW3peS6uiZtZWRpdW1fdHlwZT1waWMtdmVjdG9y',
'Content-Type':' application/x-www-form-urlencoded; charset=UTF-8',
'Content-Length':' 213',
'Origin': 'http://www.originoo.com',
'Connection': 'keep-alive',
'Cache-Control':' max-age=0',
'pic_keywords':'%E5%B7%A5%E4%BA%BA',
'medium_type':'pic-vector',
'pic_quality':'all',
'sort_type':'4',
'pic_orientation':'',
'pic_quantity':'',
'pic_gender':'',
'pic_age':'',
'pic_race':'',
'pic_color':'',
'pic_url':'',
'user_id':'0',
'company_id':'0',
'page_index':str(i),
'page_size':'40'
这是一个典型的POST的请求头,POST的请求特点就是后面带上参数以表明本次请求的数据是什么。
并不是所有的请求都很长,请求的内容是根据服务器决定的,服务器设计的复杂,那么请求就很相应变得很复杂,反之亦然:
data = { "keyword":"工人",
"color":"0",
"type":"6"
}
以上就是某网站的POST请求data部分。
其实复杂一点也就是请求中有大量服务器生成的校验参数,例如:
headers = {
'Host': 'dpapi.dispatch.paixin.com',
'User-Agent':'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0',
'Accept':'application/json, text/plain, */*',
'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://v.paixin.com/media/photo/standard/%E5%B7%A5%E4%BA%BA/1',
'Content-Type': 'application/json;charset=utf-8',
'Content-Length': '43',
'Origin': 'https://v.paixin.com',
'Connection': 'keep-alive',
'Cookie': 'Hm_lvt_8a9ebc00eda51ba9f665488c37a93f41=1552048374; Hm_lpvt_8a9ebc00eda51ba9f665488c37a93f41=1552048386; Qs_lvt_169722=1552048378; Qs_pv_169722=4547593134179576000%2C332112608763589300; Hm_lvt_f72440517129ff03cc6f22668c61aef3=1552048378; Hm_lpvt_f72440517129ff03cc6f22668c61aef3=1552048386; _ga=GA1.2.1067225704.1552048380; _gid=GA1.2.1727359604.1552048380; _gat=1',
'Cache-Control':'max-age=0',
}
这个请求头中的Cookie值显然不是人看的,其实我们在抓包时看到一些莫名奇妙的参数不要觉得恐惧,因为这是别的程序员写的,他们有他们自己的命名方法和策略,我们只要确认这个值是否必须就可以了。方法很简单,每次请求就删除一部分参数,看看是否可以正常请求,如果可以,那么就继续删,再请求,直到无法访问未知,如果无法访问,就说明你刚才删掉的参数是非常重要的,这个时候再去寻找这个参数的来源。