Python刮掉了BeautifulSoup

时间:2015-10-04 18:29:37

标签: python web-scraping beautifulsoup

您好,我正试图从此网页中检索数据:

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)到"加载"数据,但这不起作用。

Thnx帮助我

1 个答案:

答案 0 :(得分:2)

正如其他人在评论中指出的那样,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'}]}