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 日 · 5716 次点击
    这是一个创建于 3741 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    如果你有答案的话,感谢回复。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   1252 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:12 · PVG 01:12 · LAX 09:12 · JFK 12:12
    ♥ Do have faith in what you're doing.