是否有人使用 Beautifulsoup 从亚马逊成功抓取?
Is there someone have success in scraping from Amazon using Beautifulsoup?
我想做一个亚马逊的网络爬虫
但是,看起来每个数据都是None类型。
我在google找到了很多人在做亚马逊的网络爬虫
请给我一些解决此 None 类型问题的建议。
这是我的代码:
import requests
from bs4 import BeautifulSoup
amazon_dir = requests.get("https://www.amazon.es/s?k=docking+station&__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34FO3BVVCJS4V&sprefix=docking%2Caps%2C302&ref=nb_sb_ss_ts-doa-p_1_7")
amazon_soup = BeautifulSoup(amazon_dir.text, "html.parser")
product_table = amazon_soup.find("div", {"class": "sg-col-inner"})
print(product_table)
products = product_table.find("div", {"class": "a-section"})
name = products.find("span", {"class": "a-size-base-plus"})
rating = products.find("span", {"class": "a-icon-alt"})
price = products.find("span", {"class": "a-price-whole"})
print(name, rating, price)
谢谢
门户网站可能会检查 header User-Agent
以针对不同的浏览器或设备发送不同的 HTML,有时这会导致在页面上查找元素时出现问题。
但通常门户网站会检查此 header 以阻止 scripts/bots。
例如 requests
发送 User-Agent: python-requests/2.26.0
.
如果我在真实浏览器或至少较短的版本 Mozilla/5.0
中使用 header User-Agent
,则代码可以工作。
还有其他问题。
几乎有 70 个元素 <div class="sg-col-inner" ...>
,table 是第 3 个元素,但 find()
只给出第一个元素。您必须使用 find_all()
,然后使用 [2]
来获取第 3 个元素。
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0',
}
url = "https://www.amazon.es/s?k=docking+station&__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34FO3BVVCJS4V&sprefix=docking%2Caps%2C302&ref=nb_sb_ss_ts-doa-p_1_7"
response = requests.get(url, headers=headers)
print(response.text[:1000])
print('---')
amazon_soup = BeautifulSoup(response.text, "html.parser")
all_divs = amazon_soup.find_all("div", {"class": "sg-col-inner"})
print('len(all_divs):', len(all_divs))
print('---')
products = all_divs[3].find("div", {"class": "a-section"})
name = products.find("span", {"class": "a-size-base-plus"})
rating = products.find("span", {"class": "a-icon-alt"})
price = products.find("span", {"class": "a-price-whole"})
print('name:', name.text)
print('rating:', rating.text)
print('price:', price.text)
编辑:
显示所有产品的版本:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0',
}
url = "https://www.amazon.es/s?k=docking+station&__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34FO3BVVCJS4V&sprefix=docking%2Caps%2C302&ref=nb_sb_ss_ts-doa-p_1_7"
response = requests.get(url, headers=headers)
#print(response.text[:1000])
#print('---')
soup = BeautifulSoup(response.text, "html.parser")
results = soup.find("div", {"class": "s-main-slot s-result-list s-search-results sg-row"})
all_products = results.find_all("div", {"class": "sg-col-inner"})
print('len(all_products):', len(all_products))
print('---')
for item in all_products:
name = item.find("span", {"class": "a-size-base-plus"})
rating = item.find("span", {"class": "a-icon-alt"})
price = item.find("span", {"class": "a-price-whole"})
if name:
print('name:', name.text)
if rating:
print('rating:', rating.text)
if price:
print('price:', price.text)
if name or rating or price:
print('---')
顺便说一句:
门户网站会不时刷新服务器上的代码和 HTML - 因此,如果您找到教程,请检查它有多旧。较旧的教程可能不起作用,因为门户可能会更改代码中的某些内容。
许多现代页面开始使用 JavaScript 添加元素,但 requests
和 BeautifulSoup
不能 运行 JavaScript
。这可能需要使用 Selenium 来控制真正的网络浏览器,它可以 运行 JavaScript
.
我想做一个亚马逊的网络爬虫
但是,看起来每个数据都是None类型。
我在google找到了很多人在做亚马逊的网络爬虫
请给我一些解决此 None 类型问题的建议。
这是我的代码:
import requests
from bs4 import BeautifulSoup
amazon_dir = requests.get("https://www.amazon.es/s?k=docking+station&__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34FO3BVVCJS4V&sprefix=docking%2Caps%2C302&ref=nb_sb_ss_ts-doa-p_1_7")
amazon_soup = BeautifulSoup(amazon_dir.text, "html.parser")
product_table = amazon_soup.find("div", {"class": "sg-col-inner"})
print(product_table)
products = product_table.find("div", {"class": "a-section"})
name = products.find("span", {"class": "a-size-base-plus"})
rating = products.find("span", {"class": "a-icon-alt"})
price = products.find("span", {"class": "a-price-whole"})
print(name, rating, price)
谢谢
门户网站可能会检查 header User-Agent
以针对不同的浏览器或设备发送不同的 HTML,有时这会导致在页面上查找元素时出现问题。
但通常门户网站会检查此 header 以阻止 scripts/bots。
例如 requests
发送 User-Agent: python-requests/2.26.0
.
如果我在真实浏览器或至少较短的版本 Mozilla/5.0
中使用 header User-Agent
,则代码可以工作。
还有其他问题。
几乎有 70 个元素 <div class="sg-col-inner" ...>
,table 是第 3 个元素,但 find()
只给出第一个元素。您必须使用 find_all()
,然后使用 [2]
来获取第 3 个元素。
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0',
}
url = "https://www.amazon.es/s?k=docking+station&__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34FO3BVVCJS4V&sprefix=docking%2Caps%2C302&ref=nb_sb_ss_ts-doa-p_1_7"
response = requests.get(url, headers=headers)
print(response.text[:1000])
print('---')
amazon_soup = BeautifulSoup(response.text, "html.parser")
all_divs = amazon_soup.find_all("div", {"class": "sg-col-inner"})
print('len(all_divs):', len(all_divs))
print('---')
products = all_divs[3].find("div", {"class": "a-section"})
name = products.find("span", {"class": "a-size-base-plus"})
rating = products.find("span", {"class": "a-icon-alt"})
price = products.find("span", {"class": "a-price-whole"})
print('name:', name.text)
print('rating:', rating.text)
print('price:', price.text)
编辑:
显示所有产品的版本:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0',
}
url = "https://www.amazon.es/s?k=docking+station&__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&crid=34FO3BVVCJS4V&sprefix=docking%2Caps%2C302&ref=nb_sb_ss_ts-doa-p_1_7"
response = requests.get(url, headers=headers)
#print(response.text[:1000])
#print('---')
soup = BeautifulSoup(response.text, "html.parser")
results = soup.find("div", {"class": "s-main-slot s-result-list s-search-results sg-row"})
all_products = results.find_all("div", {"class": "sg-col-inner"})
print('len(all_products):', len(all_products))
print('---')
for item in all_products:
name = item.find("span", {"class": "a-size-base-plus"})
rating = item.find("span", {"class": "a-icon-alt"})
price = item.find("span", {"class": "a-price-whole"})
if name:
print('name:', name.text)
if rating:
print('rating:', rating.text)
if price:
print('price:', price.text)
if name or rating or price:
print('---')
顺便说一句:
门户网站会不时刷新服务器上的代码和 HTML - 因此,如果您找到教程,请检查它有多旧。较旧的教程可能不起作用,因为门户可能会更改代码中的某些内容。
许多现代页面开始使用 JavaScript 添加元素,但 requests
和 BeautifulSoup
不能 运行 JavaScript
。这可能需要使用 Selenium 来控制真正的网络浏览器,它可以 运行 JavaScript
.