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

问题描述 投票:-3回答:1

问题:“linkElems”列表显示为空

怀疑是什么导致了这个问题:我认为我告诉它的标签是错误的

程序功能:

  • 在Amazon.com中搜索命令行中的参数,并将网站下载到变量“res”中
  • 选择搜索结果链接的URL并将其存储到名为“linkElems”的列表中
  • 打开前5个结果的新浏览器选项卡

上下文:我已经完成了第11章自动化无聊的东西,并使用了第一个项目中的相同代码,除了我已经调整了一点点来搜索亚马逊搜索结果而不是谷歌。

我尝试过哪些标签:

  • '一个'
  • “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'))

链接的HTML示例我试图使用标记抓取:

Sample HTML That I'm searching

Example of me running the program and its output

python css web-scraping
1个回答
1
投票

你的问题是你的css选择器'a.a-link-normal a-text-normal'。这将在a-text-normal标签中查找带有a类的a-link-normal标签。

a-link-normala-text-normal都是相关的a标签。您可以通过链接它们来在css选择器中表达这个:'a.a-link-normal.a-text-normal'。这表示您正在寻找具有aa-link-normal类的a-text-normal标签。

例如,此脚本将搜索amazon以获取命令行输入,收集所有链接(links = soup.select('a.a-link-normal.a-text-normal')),然后为找到的每个链接打印出href属性。在这一点上,我只能说,它适用于我的机器。

from bs4 import BeautifulSoup
import requests
from sys import argv


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

soup = BeautifulSoup(r.content, 'html.parser')
links = soup.select('a.a-link-normal.a-text-normal')

for tag in links:
    print(tag.attrs['href'])
© www.soinside.com 2019 - 2024. All rights reserved.