最近初学了python爬虫,在爬取一个网站时遇到了__VIEWSTATE和__EVENTVALIDATION这几个参数导致分页和按条件查询获取不到数据。网上大部分能搜到的解决方式都是先用get或者post方法请求一次,并且通过正则或者其他方式获取到页面上的这两个数据,然后带入Post请求进行传参,这种方法并没用问题,但针对我所爬取的这个网站有两个踩坑的地方。
一、第一次请求时基本是不带任何参数的,在第一次请求之后,选择分页或者条件查询时,看清此次请求时需要传的参数,网上基本上说的是第二次请求时带入__VIEWSTATE和__EVENTVALIDATION这两个值,但我实际操作爬取这个网站时,单单传入这两个值是不够的
除了__VIEWSTATE和__EVENTVALIDATION以及条件查询时需要传入的参数之外,空框这四个参数也需要传入,哪怕没有值也得传一个空字符串过去,不然有可能会得不到数据。
二、就是大部分爬虫时遇到的头信息的问题
先从不传头信息,到传入User-Agent,再到传入cookie,这才获取到数据。在保证参数没有问题时,可以一点一点添加头信息尝试。
下面是我爬虫代码以及运行结果
# coding=utf-8
import re
from pip._vendor import requests
base_url = r'http://ggzy.bengbu.gov.cn/bbfwweb/ShowInfo/MoreInfo2zfcg.aspx?CategoryNum=003002'
headers2={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
}
r1 = requests.get(base_url, headers=headers2)
VIEWSTATE = re.findall(r'<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />', r1.content,re