为什么用 python 获取京东网页时,价格元素的内容是空的?

2015-10-15 17:03:45 +08:00
 hokohuang

想用 xpath 抓取一件商品的价格,总是空值,后来发现原来获取的 html 里 价格元素是空的。。

比如 chrome http://item.jd.com/1583935.html 价格片段审查元素是:
<strong class="p-price" id="jd-price">¥ 6999.00</strong>

在 python 中,用 requests 获取网页:
page = requests.get("http://item.jd.com/1583935.html")
page.text
价格片段 却是 <strong class="p-price" id="jd-price"></strong>

用 urllib 包也是一样结果,求解惑

5327 次点击
所在节点    Python
11 条回复
pythoner
2015-10-15 17:10:10 +08:00
js 异步加载的。
爬手机版(wap)吧,基本信息都有
kungfuchicken
2015-10-15 17:10:15 +08:00
因为价格是 JS 加上去的,并不是直接生成在 HTML 里面的
kchum
2015-10-15 17:10:17 +08:00
价格是 ajax 请求出来的,你查看源代码看 <strong class="p-price" id="jd-price"> 会看到页面代码是空的。
hokohuang
2015-10-15 17:16:29 +08:00
明白了!又找到新线索了。。我还是太菜了,谢谢楼上大神!
rockivy
2015-10-15 17:22:30 +08:00
之前写过一个小代码段,用来获取 JD 价格的,使用 selenium(也可以用 phantomjs)解析了页面, 拿到了价格数据. 代码是 py 的, 不过可以很简单地用其他语言实现, 可以参考下:
https://github.com/rocky1001/UrlCrawler/blob/master/price_crawler/selenium_price_crawler.py
tigerstudent
2015-10-15 18:38:07 +08:00
以前爬过京东的产品内容,价格、产品名、图片链接等都在网页头里面的 JS 里
ClutchBear
2015-10-15 20:40:03 +08:00
http://p.3.cn/prices/mgets?skuIds=J_' + str(sku)
这个就是京东获取商品价格的链接,
其中 sku 就是京东的商品的数字代码
ClutchBear
2015-10-15 20:53:40 +08:00
http://p.3.cn/prices/mgets?skuIds=J_1583935
得到的 json 数据是[{id:J_1583935,p:6999.00, m:9999.00}]
Zzzzzzzzz
2015-10-15 20:57:05 +08:00
要爬得爬好几个渠道, 京东网页、 app 、 微信、手 Q 、 wap 页很多产品价格都是不一样的.
grimpil
2017-02-05 11:01:01 +08:00
@ClutchBear
刚看到你提供的这个,不过现在返回的 json 数据变成下面这样:
[{"id":"J_652352","p":"259.00","m":"299.00","op":"259.00"}]
请教 op 和 m 这两项具体指什么?
byuc
2017-02-12 16:02:39 +08:00
@grimpil 刚刚发现了这个问题。了解了一下,貌似 M 代表发售价,只是 iPhone7 的发售价去到 9999 了? op 意思不明。

如果你有答案的话,感谢回复。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228310

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX