江湖散人 发表于 2021-8-28 16:23:34

数据爬取中xpath的使用问题

import requests
from lxml import etree

url = "http://www.xinfadi.com.cn/priceDetail.html"
resp = requests.get(url)
tree = etree.HTML(resp.text)
table = tree.xpath("/html/body/div/div/div/div/div/div/div/table/tbody")
trs = table.xpath("./tr")
print(len(trs))

图片就是我查看元素的截图。
哪位大神帮忙看一下,
为啥我的运行结果是0呢?这是什么原因啊?

qq1151985918 发表于 2021-8-28 17:41:01

你 print(resp.text) 看看

不能懒 发表于 2021-8-28 17:52:10

Xpath没有提取到?

南归 发表于 2021-8-28 18:32:45

F12看到的和源代码的不一样,你在源代码中搜不到

南归 发表于 2021-8-28 18:34:34

http://www.xinfadi.com.cn/getPriceData.html
xhr里找这个,post方法,参数是limit和current

阿奇_o 发表于 2021-8-28 22:45:44

我一开始用 tree.xpath('//tr') , 也是找不到 。。表头部分倒是可以找到,表数据好像是隐藏了?

然后,我就试试selenium,表数据就有了。。 {:10_297:}

江湖散人 发表于 2021-8-28 23:15:06

不能懒 发表于 2021-8-28 17:52
Xpath没有提取到?

好像是,就是没有内容

江湖散人 发表于 2021-8-28 23:21:27

qq1151985918 发表于 2021-8-28 17:41
你 print(resp.text) 看看

能打印出来,大概看了一下,看似好像里边没有数据一样。
不过还是看不懂!

江湖散人 发表于 2021-8-28 23:28:46

南归 发表于 2021-8-28 18:34
http://www.xinfadi.com.cn/getPriceData.html
xhr里找这个,post方法,参数是limit和current

limit:
current:
pubDateStartTime:
pubDateEndTime:
prodPcatid:
prodCatid:
prodName:

这是我在你说的XHR里的表单数据里看到的,
不仅是有两个,后边那几个怎么办啊?能麻烦你给解释一下吗?谢谢啊

江湖散人 发表于 2021-8-28 23:29:40

阿奇_o 发表于 2021-8-28 22:45
我一开始用 tree.xpath('//tr') , 也是找不到 。。表头部分倒是可以找到,表数据好像是隐藏了?

然后, ...

那这是为啥呢?你研究出来为什么用xpath找不到数据了吗?

阿奇_o 发表于 2021-8-29 00:42:03

江湖散人 发表于 2021-8-28 23:29
那这是为啥呢?你研究出来为什么用xpath找不到数据了吗?

不太了解这一块,只是打印了响应返回的内容,发现并没有表格数据这部分。
response.text 里都没有,那xpath自然就找不到了。
所以,可能是 requests.get()方法的问题吧,可能需要设置一些参数,或者用post方法?我不太懂这一块。。

江湖散人 发表于 2021-8-29 08:35:21

阿奇_o 发表于 2021-8-29 00:42
不太了解这一块,只是打印了响应返回的内容,发现并没有表格数据这部分。
response.text 里都没有,那xp ...

好吧,谢谢你啊

937135952 发表于 2021-8-29 09:36:15

江湖散人 发表于 2021-8-29 08:35
好吧,谢谢你啊

数据不是直接存放在网页里,需要找到存放数据的那个网址,检查里面网络里,可以一个个文件找到存放你要的数据的文件,或者刷新重新加载,等加载到你想要的数据时停止,找找你要的数据在那个文件里,然后再找到那个文件里的请求url就是你想要的数据真正存放的url

南归 发表于 2021-8-29 10:03:46

江湖散人 发表于 2021-8-28 23:28
limit:
current:
pubDateStartTime:


后面这几个不都是空值吗

南归 发表于 2021-8-29 10:05:13

江湖散人 发表于 2021-8-29 08:35
好吧,谢谢你啊

动态加载

阿奇_o 发表于 2021-8-29 11:56:33

本帖最后由 阿奇_o 于 2021-8-29 11:57 编辑

哈哈,我昨晚查了些资料,原来是requests等库不能"动态加载",只能获取到原始的HTML,而Selenium等则可以动态加载,所见则可以获取到。。

然后呢,若要用requests来做,需要进行"Ajax分析"。。我之前根本不懂什么是Ajax,哈哈哈

今天起来再研究了一下,它用的是POST方法,你仔细看看它的xhr会发现请求表数据地址是固定的:http://www.xinfadi.com.cn/getPriceData.html
返回的是JSON,你解析一下就好了。

概括起来就是,关键要用 request.post(url='http://www.xinfadi.com.cn/getPriceData.html', data=data)
#data类似headers也是个字典,聪明的你会找到它具体是什么的~ {:10_297:}

是的 发表于 2021-8-29 13:12:12

观望大神

江湖散人 发表于 2021-8-29 13:48:41

南归 发表于 2021-8-29 10:03
后面这几个不都是空值吗

我看所有的都是空的。这是咋回事啊?

江湖散人 发表于 2021-8-29 13:49:12

阿奇_o 发表于 2021-8-29 11:56
哈哈,我昨晚查了些资料,原来是requests等库不能"动态加载",只能获取到原始的HTML,而Selenium等则可以动 ...

谢谢啊

江湖散人 发表于 2021-8-29 13:49:49

南归 发表于 2021-8-29 10:05
动态加载

如何动态加载啊?
用xpath就不好使了吗?
页: [1] 2
查看完整版本: 数据爬取中xpath的使用问题