Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么我的CSS选择器不能与beautifulsoup一起使用,但可以作为chrome控制台查询使用?_Python_Css_Beautifulsoup - Fatal编程技术网

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

Python 为什么我的CSS选择器不能与beautifulsoup一起使用,但可以作为chrome控制台查询使用?,python,css,beautifulsoup,Python,Css,Beautifulsoup,我有一个css选择器,在chrome JS控制台中执行它时可以正常工作,但在一个示例上通过beautifulsoup运行它时不能正常工作,而在另一个示例上却可以正常工作(我无法区分两者之间的区别) 在chrome控制台中执行以下查询时,这两种查询都可以正常工作 document.querySelectorAll('div.s-result-item') 然后通过beautifulsoup运行这两个URL,这就是我得到的输出 url\u 1(有效) 输出:53(正确) url_2(不工作) 输

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

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

document.querySelectorAll('div.s-result-item') 
然后通过beautifulsoup运行这两个URL,这就是我得到的输出

url\u 1(有效)

输出:53(正确)

url_2(不工作)

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


有人知道这里可能发生了什么,以及我如何让css选择器与beautifulsoup一起工作吗?

尝试
selenium library
下载网页

from selenium import webdriver
from bs4 import BeautifulSoup

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

#set chrome webdriver path
driver = webdriver.Chrome('/usr/bin/chromedriver')

#download webpage
driver.get(url_2)

soup = BeautifulSoup(driver.page_source, 'html.parser')
listings = soup.find_all('div',{'class':'s-result-item'})

print(len(listings))
O/p:


我认为是html。将解析器更改为“lxml”。为了提高效率,您还可以将css选择器缩短为仅使用类,并重新使用与
会话
对象的连接

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))

@GlowyFit selenium很慢,因为它下载了所有与网站页面相关的内容。
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))
from selenium import webdriver
from bs4 import BeautifulSoup

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

#set chrome webdriver path
driver = webdriver.Chrome('/usr/bin/chromedriver')

#download webpage
driver.get(url_2)

soup = BeautifulSoup(driver.page_source, 'html.parser')
listings = soup.find_all('div',{'class':'s-result-item'})

print(len(listings))
url_1: 50

url_2 : 48
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))