【问题标题】:Python scrape with BeautifulSoupPython 用 BeautifulSoup 抓取
【发布时间】:2016-01-01 10:00:09
【问题描述】:

您好,我正在尝试从此网页检索数据:

http://brmr.biz/product/2716370/name/000300020_30_2_DOORSLAG

我正在使用 Python 2.7.10 和 BeautifulSoup 库。

这是我的代码:

from BeautifulSoup
import BeautifulSoup
import urllib2

url="http://brmr.biz/product/2716370/name/000300020_30_2_DOORSLAG"

page=urllib2.urlopen(url)

soup=BeautifulSoup(page)

data = soup.findAll("span", {"class":"price_bigger"})

print data`

我想获得 5,90 的价值(价格不含税)?我的代码让我得到结果“请求价格”

我尝试使用 time.sleep(1)“停止”代码以“加载”数据,但这不起作用。

谢谢你的帮助

【问题讨论】:

  • 将代码包装在三个反引号内,```code here```。这是“谢谢”!
  • 您可能需要通过直接请求来检索价格。页面通过 POST 到“be.brammer.biz/products/show-price”检索价格。表单数据给出了产品标识符。结果是带有价格信息的 JSON 消息。
  • 看来提供者不想被刮。 :) - 也许,您必须找到更复杂的解决方案,例如 koaning.github.io/html/scapingdynamicwebsites.html。我不会将其发布为答案,因为我不确定如果您的代码没有太多更改,您是否仍然无法获得价格。 joshuanapoli 给出了一个很好的提示,imo。
  • 我会看看硒。谢谢大家。

标签: python web-scraping beautifulsoup


【解决方案1】:

正如其他人在 cmets 中指出的那样,price 会动态加载一个额外的 POST 请求,您需要在代码中模拟该请求。

这里我使用requests 来维护网络抓取会话和beautifulsoup4

from bs4 import BeautifulSoup
import requests

url = "http://be.brammer.biz/product/2716370/name/000300020_30_2_DOORSLAG"
price_url = "http://be.brammer.biz/products/show-price"

with requests.Session() as session:
    soup = BeautifulSoup(session.get(url).content)

    # extract the product code - used in the POST request
    product_code = soup.find(id="localitemid")["value"]

    response = session.post(price_url, data={
        "ids[0][]": product_code
    }, headers={
        "X-Requested-With": "XMLHttpRequest"
    })

    print(response.json())

打印一个包含价格的对象:

{u'bd792fcb87': [{u'delivery_time': u'6-10', u'quantity_min': 1, u'hash': u'bd792fcb87', u'qty_order_interval': 1, u'price': u'5,90\xa0\u20ac', u'tax': 0.21, u'delivery_desc': u'Aanvraag / Demande / Anfrage', u'price_unlocalized': 5.9, u'localitemid': u'2000010600', u'currency': u'\u20ac', u'quantity_available': 0, u'delivery_time_max': 10, u'quantity_interval': 1, u'price_quantity': 1, u'price_vat': u'7,14\xa0\u20ac'}]}

【讨论】:

  • 这真的很有帮助!谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 2018-06-11
  • 1970-01-01
  • 2016-08-08
  • 2018-04-25
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多