ASP页面隐藏参数__EVENTVALIDATION获取


1、__doPostBack(eventTarget, eventArgument)方法:
	# 参数
	evenntTarget  # 要调用服务器控件生成的name熟悉 
    '''
    参数:ctl00$ContentPlaceHolder1$AspNetPager1,可以拆分如下,
    id为 ctl00的父控件
    id为 ContentPlaceHolder1的子控件
    id为 AspNetPager1 的子控件
    即:父控件$子控件 或者 父控件:子控件
    '''
	eventArgument # 调用事件的参数
    # 最后这两个参数会分别传给隐藏参数__EVENTTARGET、__EVENTARGUMENT
    '__EVENTARGUMENT': '3',
    '__EVENTTARGET': ctl00$ContentPlaceHolder1$AspNetPager1 
        
{
    '__VIEWSTATE':  页面状态信息
    '__EVENTVALIDATION': 一个数字签名,用来验证事件是否合法
}
获取__VIEWSTATE和__EVENTVALIDATION这两个隐藏参数的值,可以通过先发起请求一个get请求获取,放入data中,再发起一个post。

# 案例--中国煤炭科技网>科技专家页面
import time
import requests
from bs4 import BeautifulSoup

def get_expert_list(url, page):
    '''
    url:链接
    page:爬取页数
    '''
    expert_list = []
    url = url
    html = requests.get(url).content
    bf = BeautifulSoup(html, 'html.parser')
    VIEWSTATE = bf.find('input', {'id': '__VIEWSTATE'}).attrs['value']
    EVENTVALIDATION = bf.find('input', {'id': '__EVENTVALIDATION'}).attrs['value']
    payload = {
        '__EVENTARGUMENT': '2',
        '__EVENTTARGET': 'ctl00$ContentPlaceHolder1$AspNetPager1',
        '__VIEWSTATEGENERATOR': '484839D9',
        '__VIEWSTATE': VIEWSTATE,
        '__EVENTVALIDATION': EVENTVALIDATION,
        'ctl00$App_UserLoginControl1$TextBox1': '',
        'ctl00$App_UserLoginControl1$TextBox2': '',
        'ctl00$ContentPlaceHolder1$DropDownList1': '0',
        'ctl00$ContentPlaceHolder1$TextBox1': '',
        'ctl00$ContentPlaceHolder1$AspNetPager1_input': '2',
    }
    page = int(page)
    for i in range(1, page):
        payload['__EVENTARGUMENT'] = str(i)
        res = requests.post(url, data=payload)
        contacthtml = res.content
        time.sleep(1)
        contactObj = BeautifulSoup(contacthtml, 'html.parser')
        li_list = contactObj.select('.zhuanjia--list >li >a')
        for a in li_list:
            name = a.h3.text
            img = a.img.get('src')
            e_url = a.get('href')
            expert_list.append((name, img, e_url))
    return expert_list

get_expert_list('http://www.zgmtkj.com/Expert.aspx?menuTypeId=1', 3)

# 这个脚本可以直接放在scrapy使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值