我试图在亚马逊搜索中提取所有产品的标题。 它有效,但结果只是让我回到页眉和页脚的亚马逊链接。
如果我检查亚马逊来源的元素,看起来产品标题是用锚点包裹的标签。但是,在尝试抓取数据时似乎并非如此。
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)
答案 0 :(得分:1)
亚马逊并不喜欢从中抓取数据。如果您将此行添加到代码中:
print(plain_text)
您将看到以下内容:
> <!--
> To discuss automated access to Amazon data please contact api-services-support@amazon.com.
> 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或其他一些可以驱动实际浏览器的抓取工具。
答案 1 :(得分:0)
您是否尝试从标记的title属性中获取标题?或者您是否想要从标签的H2子项中获取标题?
如果您是第一种方式,请尝试print(link['title'])
而不是打印整个标记。在beautifulSoup中,您可以将捕获的锚的属性作为普通字典访问。