V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hokohuang
V2EX  ›  Python

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

  •  
  •   hokohuang · 2015-10-15 17:03:45 +08:00 · 5318 次点击
    这是一个创建于 3314 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想用 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 包也是一样结果,求解惑

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

    如果你有答案的话,感谢回复。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2634 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.