无法通过网络抓取提取信息

时间:2016-05-01 21:16:21

标签: python web-scraping beautifulsoup

http://www.harrods.com/accessories/handbags?viewall=yes

在这个网页上,我试图获得手袋的品牌名称,包名,款式,材质,颜色,原价以及促销价。

到目前为止,我有这段代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup

saksurl="http://www.harrods.com/accessories/handbags?viewall=yes"
html = urlopen(saksurl)
bsObj = BeautifulSoup(html.read(),"html.parser")

for product in bsObj.findAll("ul",{"class":"products_row"}):
    product_price = product.find("span",{"class":"price_all plp_price"}).get_text()
    print((product.h3).get_text(),product_price)

我遇到了这些问题:

  • 将品牌名称与行李名称分开
  • 由于某种原因,我想用欧元买单(希望用$)
  • 我没有收到一些行李的价格
  • 将原始价格与销售价格分开
  • 如何获得袋子的颜色?

1 个答案:

答案 0 :(得分:0)

  
      
  • 将品牌名称与包装袋分开。名称
  •   

在带有品牌和名称的a内,有一个span,其中有两个from urllib.request import urlopen, Request ... req = Request(saksurl) req.add_header('Cookie', 'Country=US; Currency=USD;') html = urlopen(req) ,一个带有品牌,一个带有名称。

您可以使用Firefox或Chrome中的开发人员工具轻松查看此类内容。右键单击一个元素,然后单击“检查[元素]'”。比看HTML更好。虽然看HTML也应该揭示这一点。

  
      
  • 我出于某种原因以欧元获得价格(希望以美元计算)
  •   

顶部有一个国家/货币选择器。更改并检查Chrome中的“网络”标签后,我发现新请求中包含一个额外的Cookie。这导致了解决方案:

products_row
  
      
  • 我没有得到一些行李的价格
  •   

每个li可以包含多个行李,通常为3个,每个行李都在price_all标记中。再次,仔细查看HTML结构。

  
      
  • 将原始价格与销售价格分开
  •   

正常价格只有span下的文字。促销价格还有两个wasnow<div class="color_c">类。

  
      
  • 如何获得袋子的颜色?
  •   

每个产品都有<a class="color_swatch">href个标签。您可以从title属性获取小圆形图片,href属性中的颜色名称,以及该颜色中实际行李的图片与{{1}}密切相关并且可以从中计算出来。