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

2015 年 10 月 15 日
 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 包也是一样结果,求解惑

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

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

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

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

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

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

© 2021 V2EX