【发布时间】:2021-03-17 17:43:54
【问题描述】:
我正在开展一个项目,该项目需要我使用 AWS Lambda 从亚马逊抓取产品标题/名称。我的代码如下:
import json
from bs4 import BeautifulSoup
from googleapiclient.discovery import build
import requests
import base64
def lambda_handler(event, context):
headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0"}
URL = "https://www.amazon.in/Amazon-Brand-Solimo-Foliage-Bedsheet/dp/B076ZTSW47/ref=sr_1_6_mod_primary_lightning_deal?dchild=1&pd_rd_r=53f449ad-419e-466d-bab8-2a09a026efc6&pd_rd_w=5XoS9&pd_rd_wg=VXhi2&pf_rd_p=d848f904-cfb3-4815-b7b2-fe0f44e4153f&pf_rd_r=B9HGM8VTCBCPSTBNW5Z6&qid=1616001168&refinements=p_n_format_browse-bin%3A19560802031&s=kitchen&sbo=Tc8eqSFhUl4VwMzbE4fw%2Fw%3D%3D&smid=AT95IG9ONZD7S&sr=1-6"
content = requests.get(URL, headers = headers)
soup = BeautifulSoup(content.text, 'html.parser')
title = soup.find("span", attrs={"id":'productTitle'}).string.strip()
return {
'title' : title,
}
由于某种原因,这仅在我的 URL 来自 Amazon.in(印度)而不是 amazon.com(美国)时才有效 *注意:我不在印度(不确定这是否在任何事情中起作用)
如果我保持所有其他内容不变,只需将 URL 更改为来自 amazon.com(美国)的内容。当我检查 .in 和 US 页面时,它们都有一个带有 id 'productTitle' 的 span 元素 例如:
URL = https://www.amazon.com/Saucony-Mens-Kinvara-Running-Shoe/dp/B07Q8Y4GQL/?_encoding=UTF8&pd_rd_w=c0VM8&pf_rd_p=de0c3fe6-321f-473e-bef6-6a700af423d3&pf_rd_r=S7482G8JKWVS6GB5ADG8&pd_rd_r=faa67bb1-ca9b-4c1d-a730-21c49cfd9b35&pd_rd_wg=KiSz4&ref_=pd_gw_trq_rep_sims_gw
我收到此错误:
Response
{
"errorMessage": "'NoneType' object has no attribute 'string'",
"errorType": "AttributeError",
"stackTrace": [
[
"/var/task/lambda_function.py",
14,
"lambda_handler",
"title = soup.find(\"span\", attrs={\"id\":'productTitle'}).string.strip()"
]
]
}
我很确定这与用户代理和亚马逊禁止抓取有关。我对网络抓取非常陌生,所以如果我做错了什么或者是否有任何其他更改需要,请告诉我。我拥有的代码非常简单,所以我很确定错误出在标头/用户代理上,但再一次,我对此很陌生,需要一些指导
编辑:@MendelG suggested an answer 实际上可以在 Pycharm 或 Spyder 等其他 IDE 上工作,但在 AWS Lambda 上仍然会出现同样的错误,有人知道 lambda 以不同方式执行它的原因吗?强>
【问题讨论】:
-
我觉得你用他们自己的服务刮亚马逊很有趣,但这无关紧要。 :) 相关的是,如果它击中
.com或.de,它们会阻止你的抓取工具。所以,我想你最好还是坚持.in。 -
问题是它需要在amazon.com(美国)上使用
-
我认为他们希望您使用亚马逊产品 API 而不是抓取网站。
-
在哪里可以找到亚马逊产品 API?
-
我只能找到广告 API,但找不到产品
标签: python amazon-web-services web-scraping beautifulsoup aws-lambda