鱼C论坛

 找回密码
 立即注册
查看: 2958|回复: 4

[已解决]爬虫

[复制链接]
发表于 2023-3-2 19:46:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
大佬们,这个为什么爬取不到数据呀
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[3]/table/tbody/tr/td/table/tbody/tr/td[2]/div/table[4]/tbody/tr/td[1]/table/tbody/tr[2]/td[2]/text()')
print(title)
最佳答案
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')[0]
data['__EVENTVALIDATION'] = tree.xpath('//*[@id="__EVENTVALIDATION"]/@value')[0]


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[4]/tbody/tr/td[1]/table/tbody/tr[2]/td[2]
tds = tree.xpath('//*[@id="ContentRight_divfff"]/table[2]/tr/td')

for td in tds:
    trs = td.xpath('./table/tr')
    header = trs[0].xpath('./td/text()')
    table = tt.Texttable()
    table.header(header)
    for row in trs[1:]:
        table.add_row(row.xpath('./td/text()'))
    print(table.draw())
    print()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

更不会去帮你渲染
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

而 requests 获取 ...

那该怎么写才能获取三门峡这类数据呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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')[0]
data['__EVENTVALIDATION'] = tree.xpath('//*[@id="__EVENTVALIDATION"]/@value')[0]


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[4]/tbody/tr/td[1]/table/tbody/tr[2]/td[2]
tds = tree.xpath('//*[@id="ContentRight_divfff"]/table[2]/tr/td')

for td in tds:
    trs = td.xpath('./table/tr')
    header = trs[0].xpath('./td/text()')
    table = tt.Texttable()
    table.header(header)
    for row in trs[1:]:
        table.add_row(row.xpath('./td/text()'))
    print(table.draw())
    print()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

要安装 texttable  ...

好的,感谢感谢,我研究一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-2 01:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表