python - 为什么我的 CSS 选择器不能与 beautifulsoup 一起使用,但可以作为 chrome 控制台查询正常工作?

标签 python css beautifulsoup

我有一个 css 选择器,在 chrome JS 控制台中执行它时工作正常,但在一个示例中通过 beautifulsoup 运行它时不起作用,但在另一个示例中工作(我无法辨别两者之间的区别) .

url_1 = 'https://www.amazon.com/s?k=bacopa&page=1'
url_2 = 'https://www.amazon.com/s?k=acorus+calamus&page=1'

在 chrome 控制台中执行时,以下查询在两者上都可以正常工作。

document.querySelectorAll('div.s-result-item') 

然后通过 beautifulsoup 运行这两个 url,这是我得到的输出。

url_1(有效)

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
r = requests.get(url_1, headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
listings = soup .select('div.s-result-item')
print(len(listings))

输出:53(正确)

url_2(无效)

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
r = requests.get(url_2, headers=headers)
soup = BeautifulSoup(r.content, 'html.parser')
listings = soup.select('div.s-result-item')
print(len(listings))

输出:0(不正确 - 预期:49)

有谁知道这里会发生什么以及如何让 css 选择器与 beautifulsoup 一起工作?

最佳答案

我认为是html。将解析器更改为“lxml”。您还可以将您的 css 选择器缩短为仅对 Session 对象进行分类和重新使用连接以提高效率。

import requests
from bs4 import BeautifulSoup as bs

urls = ['https://www.amazon.com/s?k=bacopa&page=1','https://www.amazon.com/s?k=acorus+calamus&page=1']

with requests.Session() as s:
    for url in urls:
        r = s.get(url, headers = {'User-Agent' : 'Mozilla/5.0'})
        soup = bs(r.content, 'lxml')
        listings = soup.select('.s-result-item')
        print(len(listings))

关于python - 为什么我的 CSS 选择器不能与 beautifulsoup 一起使用,但可以作为 chrome 控制台查询正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56374167/

相关文章:

javascript - 覆盖横幅不显示在移动 View 中

html - 使 CSS Div 100% 页面高度(不是窗口)

python - 表的行周围缺少 <tr> : can I parse it?

python - BeautifulSoup ,get_text 但不是 <span> 文本..我怎样才能得到它?

jquery - 在 Accordion 中一次打开一个选项卡

Python 变量和文件名冲突

python - Jupyter requests.get 返回不完整的 html

python - 在 Python 中返回没有特定元素的列表的快速方法

python - 改善 BeautifulSoup 性能

python - 合并每个 id 的后半行,但每个 id 的行不相同