我正在使用以下python脚本从Amazon pages抓取信息。
在某个时候,它停止返回页面结果。脚本正在启动,浏览关键字/页面,但我只得到标题作为输出:
关键字排名标题ASIN得分评论有效日期
我怀疑问题出在下一行,因为此标记不再存在,并且...
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"postinstall": "patch-package"
}
...
var没有任何值:
results
这是完整的代码:
results = soup.findAll('div', attrs={'class': 's-item-container'})
输出应如下所示(为清楚起见,我已经修剪了标题)。
关键字排名标题ASIN得分评论有效日期
蓝色+滑板3鱼鹰完成 Beginning B00IL1JMF4 3.7 40 Prime 2019年2月21日 蓝色+滑板4 ENKEEO Complete Mini C B078J9Y1DG 4.5 42 Prime 2019年2月21日Blue + Skateboard 5 skatro- Mini Cruiser B00K93PIXM 4.8223 Prime 2019年2月21日 蓝色+滑板7 Vinsani复古巡洋舰 B00CSV72AK 4.4 8 Prime 2019年2月21日Blue + Skateboard 8 Ridge Retro Cruiser Bo B00CA33ISQ 4.1207 Prime 2019年2月21日 蓝色+滑板9 Xootz Kids Complete Be B01B2YNSJM 3.6 32 Prime 2019年2月21日Blue + Skateboard 10 Enuff Pyro II Skateboa B00MGRGX2Y 4.3 68 Prime 2019年2月21日
答案 0 :(得分:1)
以下显示了您可以进行的一些更改。我已经更改为在某些时候使用CSS选择器。
要循环的主要结果集由soup.select('.s-result-list [data-asin]')
检索。这将指定具有类名.s-result-list
的子元素具有属性data-asin
的子元素。这与页面上的60(当前)项匹配。
我将PRIME选择替换为使用attribute = value选择器
标题现在为h5
,即header = soup.select_one('h5')
。
soup.select_one('[aria-label="Amazon Prime"]
示例代码:
import datetime
from bs4 import BeautifulSoup
import time
from selenium import webdriver
import re
keyword = 'blue+skateboard'
driver = webdriver.Chrome()
url = 'https://www.amazon.co.uk/s/ref=nb_sb_noss_2?url=search-alias%3Daps&field-keywords={}'
driver.get(url.format(keyword))
soup = BeautifulSoup(driver.page_source, 'lxml')
results = soup.select('.s-result-list [data-asin]')
for a, b in enumerate(results):
soup = b
header = soup.select_one('h5')
result = a + 1
title = header.text.strip()
try:
link = soup.select_one('h5 > a')
url = link['href']
url = re.sub(r'/ref=.*', '', str(url))
except:
url = "None"
if url !='/gp/slredirect/picassoRedirect.html':
ASIN = re.sub(r'.*/dp/', '', str(url))
#print(ASIN)
try:
score = soup.select_one('.a-icon-alt')
score = score.text
score = score.strip('\n')
score = re.sub(r' .*', '', str(score))
except:
score = "None"
try:
reviews = soup.select_one("href*='#customerReviews']")
reviews = reviews.text.strip()
except:
reviews = "None"
try:
PRIME = soup.select_one('[aria-label="Amazon Prime"]')
PRIME = PRIME['aria-label']
except:
PRIME = "None"
data = {keyword:[keyword,str(result),title,ASIN,score,reviews,PRIME,datetime.datetime.today().strftime("%B %d, %Y")]}
print(data)
示例输出: