哈岁NB 发表于 2023-3-2 19:46:09

爬虫

大佬们,这个为什么爬取不到数据呀
import requests
from lxml import html
etree = html.etree

url = 'http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87'
data = {'ctl00$ContentLeft$menuDate1$TextBox11': '2023-03-04'}
headers = {'User-Agent': 'Mozilla/5.0'}
resp = requests.get(url, data=data, headers=headers).text
tree = etree.HTML(resp)
title = tree.xpath('/html/body/form/div/table/tbody/tr/td/table/tbody/tr/td/div/table/tbody/tr/td/table/tbody/tr/td/text()')
print(title)

isdkz 发表于 2023-3-2 20:02:34

因为那个数据是 js 动态渲染的,你直接在审查元素那里复制的 xpath 都是渲染后的了,

而 requests 获取到的是你请求的页面的源代码,它不会帮你请求 js,css 等动态资源,

更不会去帮你渲染

哈岁NB 发表于 2023-3-2 20:06:07

isdkz 发表于 2023-3-2 20:02
因为那个数据是 js 动态渲染的,你直接在审查元素那里复制的 xpath 都是渲染后的了,

而 requests 获取 ...

那该怎么写才能获取三门峡这类数据呢

isdkz 发表于 2023-3-2 22:05:28

本帖最后由 isdkz 于 2023-3-2 22:06 编辑

哈岁NB 发表于 2023-3-2 20:06
那该怎么写才能获取三门峡这类数据呢

我帮你改了一下代码,有疑惑再问,之前的那些参数不全,无法获取到 ajax 的响应

要安装 texttable 这个库:
pip install texttable

import requests
import texttable as tt
from lxml import html
from urllib.request import unquote
etree = html.etree

url = 'http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87'
headers = {'User-Agent': 'Mozilla/5.0'}
data = {
    'ctl00$ContentLeft$menuDate1$TextBox11': '2023-03-04',
    '__ASYNCPOST': 'true',
    'ctl00$ScriptManager1': 'ctl00$ScriptManager1|ctl00$ContentLeft$Button1'
}


sess = requests.Session()
sess.headers = headers
resp = sess.get(url).text
tree = etree.HTML(resp)
data['__VIEWSTATE'] = tree.xpath('//*[@id="__VIEWSTATE"]/@value')
data['__EVENTVALIDATION'] = tree.xpath('//*[@id="__EVENTVALIDATION"]/@value')


resp = sess.post(url, data=data).text
'''
with open('tmp.html', 'w') as f:
    print(resp, file=f)
'''


tree = etree.HTML(resp)

# /html/body/table/tbody/tr/td/table/tbody/tr/td
tds = tree.xpath('//*[@id="ContentRight_divfff"]/table/tr/td')

for td in tds:
    trs = td.xpath('./table/tr')
    header = trs.xpath('./td/text()')
    table = tt.Texttable()
    table.header(header)
    for row in trs:
      table.add_row(row.xpath('./td/text()'))
    print(table.draw())
    print()

哈岁NB 发表于 2023-3-3 08:56:03

isdkz 发表于 2023-3-2 22:05
我帮你改了一下代码,有疑惑再问,之前的那些参数不全,无法获取到 ajax 的响应

要安装 texttable...

好的,感谢感谢,我研究一下
页: [1]
查看完整版本: 爬虫