Cookie反爬
cookie反爬虫的基本概念
Cookie反爬虫是网站用来区分正常用户个爬虫程序的一种技术手段,通过验证请求中的Cookie值来阻止恶意爬取。服务器会验证Cookie的合法性,若Cookie不存在,无效或过期,服务器将拒绝返回真实数据,从而有效防护了网站的资源。这种机制被广泛应用于各种web应用,尤其是数据价值高的网站。
cookie反爬的原理与实现方式
服务器利用Cookie携带服务器状态信息,通过检查信息来判断请求的合法性。其实现方式有两种:
- 简单Cookie校验:服务器首次访问时通过响应头的set-cookie字段直接返回cookie值,后续需携带该cookie。
- 动态cookie生成:首次请求时,服务器返回一段JavaScrip代码,该代码在前端生成后成cookie值,后续请求需携带此动态生成的cookie。
Cookie反爬典型特征:需要多次请求服务器才能获取数据。第一次请求返回设置Cookie的Js代码,第二次请求携带该Cookie才能获取真实数据
案例1:麻章区人民政府
逆向地址:http://www.zjmazhang.gov.cn/hdjlpt/published?via=pc
逆向接口:http://www.zjmazhang.gov.cn/hdjlpt/letter/pubList
逆向参数:cookie,x-csrf-token
importrequests cookies={'td_cookie':'4107756572','XSRF-TOKEN':'','szxx_session':'',}headers={'Accept':'application/json, text/plain, */*','Accept-Language':'zh-CN,zh;q=0.9,en;q=0.8','Cache-Control':'no-cache','Connection':'keep-alive','Content-Type':'application/x-www-form-urlencoded','Origin':'http://www.zjmazhang.gov.cn','Pragma':'no-cache','Referer':'http://www.zjmazhang.gov.cn/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36','X-CSRF-TOKEN':'yGGqnbE6knLTHWaZnpwh8BVqPgNPlDBctsMYFj96',}data={'offset':'0','limit':'20','site_id':'759010','time_from':'1760544000','time_to':'1792079999',}response=requests.post('http://www.zjmazhang.gov.cn/hdjlpt/letter/pubList',cookies=cookies,headers=headers,data=data,verify=False,)这里我们分析得到cookie里面的三个参数,只要留下szxx_session仍然内容能够正常访问,然后我们开始需要分析cookie值是前端生成的还是后端生成的 这里我们可以在控制台输出document.cookie来判断,没有输出说明是后端生成的(td_cookie为前端生成,但是这里可以省略)
还有就是setcookie是后端返回的
然后开始分析x-csrf-token的位置,一般是在html文件里面,我们可以定位到在文档这个接口(http://www.zjmazhang.gov.cn/hdjlpt/published?via=pc)下面
我们通过正则匹配得到我们需要配的数据
importreimportrequests headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36',}defcsrf_info():url='http://www.zjmazhang.gov.cn/hdjlpt/published?via=pc'response=requests.get(url,headers=headers)_csrf=re.findall("_CSRF = '(.*?)';",response.text)szxx_session=response.cookies.get('szxx_session')return_csrf[0],szxx_sessiondefget_info():api_url='http://www.zjmazhang.gov.cn/hdjlpt/letter/pubList'csrf_token,szxx_session=csrf_info()headers['x-csrf-token']=csrf_token cookies={'szxx_session':szxx_session,}data={'offset':'0','limit':'20','site_id':'759010','time_from':'1760544000','time_to':'1792079999',}response=requests.post(api_url,headers=headers,cookies=cookies,data=data)print(response.text)if__name__=='__main__':get_info()运行得到需要数据