V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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 · Oct 15, 2015 · 5848 views
    This topic created in 3850 days ago, the information mentioned may be changed or developed.

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

    如果你有答案的话,感谢回复。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   941 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 19:00 · PVG 03:00 · LAX 12:00 · JFK 15:00
    ♥ Do have faith in what you're doing.