2017-04-19 130 views
0

我试图拉亚马逊搜索所有产品的标题。 它的工作原理,但结果只是让我回到页眉和页脚亚马逊链接。Python Beautifulsoup奇怪的结果

如果我检查亚马逊的源代码上的元素,它看起来像产品标题是''标签包装在锚点。但是,在试图抓取数据时并不是这种情况。

import requests 
import re 
from bs4 import BeautifulSoup 

def adverts_trade(max_pages): 
    page = 1 
    while page <= max_pages: 
     url = 'https://www.amazon.co.uk/s/ref=sr_pg_2?rh=n%3A560798%2Cn%3A560834%2Ck%3Acanon+lenses&page=' + str(page) + '&keywords=canon+lenses&ie=UTF8' 
     source_code = requests.get(url) 
     plain_text = source_code.text 
     soup = BeautifulSoup(plain_text, "html.parser") 
     for link in soup.findAll('a'): 
      #href = link.find('h2').get_text() 
      print(link) 
     page += 1 

adverts_trade(10) 

回答

1

亚马逊不喜欢你从他们那里抓取数据。如果添加此行的代码:

print(plain_text) 

你会看到以下内容:

>  <!-- 
>    To discuss automated access to Amazon data please contact [email protected] 
>    For information about migrating to our APIs refer to our Marketplace APIs at 
> https://developer.amazonservices.co.uk/ref=rm_5_sv, or our Product 
> Advertising API at 
> https://affiliate-program.amazon.co.uk/gp/advertising/api/detail/main.html/ref=rm_5_ac 
> for advertising use cases. 
>  --> 

不要指望大多数网站能够简单地使用请求和BS4抽取数据。要么使用他们的API,要么考虑Selenium或其他可以驱动实际浏览器的抓取工具。

+0

我很惊讶,除硒以外没有更简单的解决方法 – user2331566

+0

亚马逊花费大量资金获得优质图像,产品属性并实时动态调整价格。他们需要尽可能让竞争对手抓取这些数据。几乎所有主要的电子商务网站都尽其所能防止刮蹭。 – Chris

0

您是否试图从标签的title属性中获得标题?或者你是否试图从H2标签中获得标题?

如果你是第一种方式,然后尝试print(link['title'])而不是打印整个标签。在beautifulSoup中,您可以作为普通字典访问catched锚点的属性。