2017-04-19 177 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錨點的屬性。