福田行者 发表于 2022-3-21 20:27:48

求助如何爬虫中遇到内置选择表格

最近学习了小甲鱼的效率革命的爬虫教程,但是在实际爬取网页时候还是遇到一些难以解决的问题想求助各位鱼油!!!
在爬取这个网址的时候,网址如下:

http://spf.szfcweb.com/szfcweb/(S(yhdau53nnmqkevmkjhamlddp))/DataSerach/MITShowList.aspx

发现 项目区域   可以选择不同的区域,如工业园区,吴中区等。选择不同的区域,下面表格的内容会对应到相应的区的项目,但网址的url并不会改变。 所以之前学到通过传递url的参数的方式好像也没有用了。想问问这种情况下如何爬取各个区的项目情况呢?请各位鱼油指教!

suchocolate 发表于 2022-3-23 01:58:24


选不同的项目,它会带不同的参数发给网站。
这些参数来自上一次访问,所以你每次注意收集一下参数,并且带上去就能查询到了。

suchocolate 发表于 2022-3-23 02:15:11

#!/usr/bin/env python3
# _*_ coding: utf-8 _*_
# Developer: suchocolate
# Date: 2022-03-23 01:16
# File name: pc1.py
# Development tool: PyCharm

import requests
from lxml import etree


def get_args(txt, f=0):
    html = etree.HTML(txt)
    sta = html.xpath('//input[@id="__VIEWSTATE"]/@value')
    gen = html.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')
    eve = html.xpath('//input[@id="__EVENTVALIDATION"]/@value')
    if not f:
      return sta, gen, eve
    else:
      zones = html.xpath('//select[@name="ctl00$MainContent$ddl_RD_CODE"]/option/@value')
      return sta, gen, eve, zones


def main():
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
               'Origin': 'http://spf.szfcweb.com',
               'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
               'Host': 'spf.szfcweb.com',
               'Accept-Encoding': 'gzip, deflate',
               'Content-Type': 'application/x-www-form-urlencoded',
               'Upgrade-Insecure-Requests': '1',
               'Referer': 'http://spf.szfcweb.com/szfcweb/(S(r2ga2fthdmz1mel1rym2xyat))/DataSerach/MITShowList.aspx'}
    url = 'http://spf.szfcweb.com/szfcweb/(S(r2ga2fthdmz1mel1rym2xyat))/DataSerach/MITShowList.aspx'
    r = requests.get(url, headers=headers)
    sta, gen, eve, zones = get_args(r.text, f=1)
    for zone in zones:
      data = {'__EVENTTARGET': '',
                '__EVENTARGUMENT': '',
                '__LASTFOCUS': '',
                '__VIEWSTATE': sta,
                '__VIEWSTATEGENERATOR': gen,
                '__EVENTVALIDATION': eve,
                'ctl00$MainContent$txt_Com': '',
                'ctl00$MainContent$txt_Pro': '',
                'ctl00$MainContent$ddl_RD_CODE': zone,
                'ctl00$MainContent$txt_ysz': '',
                'ctl00$MainContent$bt_select': '查询',
                'ctl00$MainContent$PageGridView1$ctl12$PageList': '0'
                }
      r = requests.post(url, headers=headers, data=data)
      # print(r.status_code)
      print(r.text)
      sta, gen, eve = get_args(r.text)


if __name__ == '__main__':
    main()

福田行者 发表于 2022-5-5 07:57:59

suchocolate 发表于 2022-3-23 02:15


感谢解答
页: [1]
查看完整版本: 求助如何爬虫中遇到内置选择表格