鱼C论坛

 找回密码
 立即注册
查看: 2023|回复: 28

[已解决]数据爬取中xpath的使用问题

[复制链接]
发表于 2021-8-28 16:23:34 | 显示全部楼层 |阅读模式

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

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

x
  1. import requests
  2. from lxml import etree

  3. url = "http://www.xinfadi.com.cn/priceDetail.html"
  4. resp = requests.get(url)
  5. tree = etree.HTML(resp.text)
  6. table = tree.xpath("/html/body/div[2]/div/div/div/div[4]/div[1]/div/table/tbody")[0]
  7. trs = table.xpath("./tr")
  8. print(len(trs))
复制代码


图片就是我查看元素的截图。
哪位大神帮忙看一下,
为啥我的运行结果是0呢?这是什么原因啊?
最佳答案
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也是个字典,聪明的你会找到它具体是什么的~

捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-28 17:41:01 | 显示全部楼层
你 print(resp.text) 看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-28 17:52:10 | 显示全部楼层
Xpath没有提取到?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-28 18:32:45 | 显示全部楼层
F12看到的和源代码的不一样,你在源代码中搜不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-28 18:34:34 | 显示全部楼层
http://www.xinfadi.com.cn/getPriceData.html
xhr里找这个,post方法,参数是limit和current
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

然后,我就试试selenium,表数据就有了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-28 23:15:06 | 显示全部楼层
不能懒 发表于 2021-8-28 17:52
Xpath没有提取到?

好像是,就是没有内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-28 23:21:27 | 显示全部楼层
qq1151985918 发表于 2021-8-28 17:41
你 print(resp.text) 看看

能打印出来,大概看了一下,看似好像里边没有数据一样。
不过还是看不懂!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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里的表单数据里看到的,
不仅是有两个,后边那几个怎么办啊?能麻烦你给解释一下吗?谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

然后, ...

那这是为啥呢?你研究出来为什么用xpath找不到数据了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 00:42:03 | 显示全部楼层
江湖散人 发表于 2021-8-28 23:29
那这是为啥呢?你研究出来为什么用xpath找不到数据了吗?

不太了解这一块,只是打印了响应返回的内容,发现并没有表格数据这部分。
response.text 里都没有,那xpath自然就找不到了。
所以,可能是 requests.get()方法的问题吧,可能需要设置一些参数,或者用post方法?我不太懂这一块。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好吧,谢谢你啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 09:36:15 | 显示全部楼层

数据不是直接存放在网页里,需要找到存放数据的那个网址,检查里面网络里,可以一个个文件找到存放你要的数据的文件,或者刷新重新加载,等加载到你想要的数据时停止,找找你要的数据在那个文件里,然后再找到那个文件里的请求url就是你想要的数据真正存放的url
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 10:03:46 | 显示全部楼层
江湖散人 发表于 2021-8-28 23:28
limit:
current:
pubDateStartTime:

后面这几个不都是空值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 10:05:13 | 显示全部楼层

动态加载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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也是个字典,聪明的你会找到它具体是什么的~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-29 13:12:12 | 显示全部楼层
观望大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 13:48:41 | 显示全部楼层
南归 发表于 2021-8-29 10:03
后面这几个不都是空值吗

我看所有的都是空的。这是咋回事啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-29 13:49:49 | 显示全部楼层

如何动态加载啊?
用xpath就不好使了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 22:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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