如何使用BeautifulSoup4在Amazon中打开链接?

时间:2019-04-28 20:53:55

标签: python css web-scraping

问题:“ linkElems”列表似乎为空

怀疑是引起问题的原因:我认为我要告诉它抓取的标签是错误的

程序功能:

  • 在Amazon.com中搜索命令行中的参数,然后下载 网站放入变量“ res”
  • 选择网址的链接 搜索结果并将其存储在名为“ linkElems”的列表中
  • 打开新的浏览器标签以查看前5个结果

上下文:我已经完成了《自动化无聊》的第11章,并使用了第一个项目中的相同代码,只是我做了一些调整以搜索Amazon搜索结果而不是google。

我尝试过的标签:

  • 'a'
  • ’h2。一个’
  • 'a.a-link-normal a-text-normal'
  • '。h2 a'
#! python3
#Shop on Amazon - searchs amazon and opens the first 5 top results

import sys,requests,bs4,webbrowser,logging

print ('Searching')

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36'
}

res = requests.get('https://www.amazon.com/s?k=' + ''.join(sys.argv[1:]))
res.raise_for_status

soup = bs4.BeautifulSoup(res.text,features = 'html.parser')

linkElems = soup.select('a.a-link-normal a-text-normal')
numOpen = min(5, len(linkElems))
for i in range(numOpen):
    webbrowser.open('https://amazon.com' + linkElems[i].get('href'))
我正在尝试使用标签抓取的

H TML链接示例:

Sample HTML That I'm searching

Example of me running the program and its output

1 个答案:

答案 0 :(得分:1)

您的问题是您的CSS选择器'a.a-link-normal a-text-normal'。这将在a-text-normal类的a标记内寻找a-link-normal标记。

a-link-normala-text-normal都是相关a标签的两者类。您可以通过像这样'a.a-link-normal.a-text-normal'进行链接来在CSS选择器中表达这一点。这表示您正在寻找同时具有类a a-link-normal的{​​{1}}标记。

例如,该脚本将在亚马逊搜索您的命令行输入,收集所有链接(a-text-normal),然后为找到的每个链接打印links = soup.select('a.a-link-normal.a-text-normal')属性。在这一点上,我只能说它在我的机器上工作。

href