我想创建一个程序,在亚马逊搜索结果页面中显示所有“畅销书”,并在新标签页中打开每个“畅销书”。
这是现在的代码:
import webbrowser, sys, requests
from bs4 import BeautifulSoup
amazonSearch = "".join(sys.argv[1:])
amazonResults = "https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-
alias%3Daps&field-keywords=" + amazonSearch
#getting search links
page = requests.get(amazonResults)
soup = BeautifulSoup(page.text, "html.parser")
searchLinks = soup.find_all("a", {"class": "a-link-normal s-access-detail-
page s-color-twister-title-link a-text-normal"})
if len(sys.argv) > 1:
webbrowser.open_new_tab(amazonResults)
print(page.status_code)
print(searchLinks)
else:
webbrowser.open_new_tab("https://www.amazon.com/")
现在,我无法使用class=a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal
获取所有锚标记的列表。打印列表时,结果为空白。我还检查了http状态代码,看看网址是否有问题,但一切似乎都没问题。
答案 0 :(得分:0)
现在尝试过同样的事情,我发现的唯一一个甚至在该标签内以相同方式开始的课程是:
"a-link-normal s-ref-text-link"
再次检查结果页面。
import requests
from bs4 import BeautifulSoup
amazonResults = "https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=" +"books"
page = requests.get(amazonResults)
soup = BeautifulSoup(page.text, "html.parser")
searchLinks = soup.find_all(class_=re.compile("a-link-normal\s.+?"))
您可能在所选类中没有任何内容。
答案 1 :(得分:0)
实际上,错误是在page s-color
使用以下语法获取这些超链接应该没有问题:
searchLinks = [s['href'] for s in soup.find_all("a", {"class": "a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal"})]
修改强>:
您还必须更改请求标头,否则页面将不会加载内容:
import requests
from bs4 import BeautifulSoup
amazonResults = "https://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&field-keywords=python"
with requests.session() as s:
s.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0'}
page = s.get(amazonResults)
soup = BeautifulSoup(page.text, "html.parser")
searchLinks = [s['href'] for s in soup.find_all("a", {"class": "a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal"})]
print(searchLinks)
答案 2 :(得分:-1)
a-link-normal s-access-detail-page s-color-twister-title-link a-text-normal
类用于表示赞助商品。请注意,即使在网站的源代码中,类名之间也有一个双重空格,BeautifulSoup会在整个过程中将其删除,您需要将其删除才能定位元素。
使用以下代码定位赞助商品和普通商品:
searchLinks = soup.find_all("a", {"class": "a-link-normal a-text-normal"})
或
searchLinks = soup.select('a.a-link-normal.a-text-normal')
如果你喜欢CSS Selectors。我认为后者更具可读性。
您的代码中有一个错误,您可以修复:amazonSearch = "".join(sys.argv[1:])
。您需要使用+
分隔符来分隔搜索关键字。请改用"+".join(sys.argv[1:])
。