为什么我在用python中的BeautifulSoup刮取任何数据时总是得到无列表或空列表

为什么我在用python中的BeautifulSoup刮取任何数据时总是得到无列表或空列表,python,python-3.x,beautifulsoup,python-requests,Python,Python 3.x,Beautifulsoup,Python Requests,我正在尝试使用包含标题的span的id从amazon.com提取一个简单的产品标题。 这是我写的: import requests from bs4 import BeautifulSoup url = 'https://www.amazon.com/Acer-SB220Q-Ultra-Thin-Frame-Monitor/dp/B07CVL2D2S/ref=lp_16225007011_1_7' res = requests.get(url) soup = BeautifulSoup(res

我正在尝试使用包含标题的span的id从amazon.com提取一个简单的产品标题。 这是我写的:

import requests
from bs4 import BeautifulSoup

url = 'https://www.amazon.com/Acer-SB220Q-Ultra-Thin-Frame-Monitor/dp/B07CVL2D2S/ref=lp_16225007011_1_7'
res = requests.get(url)
soup = BeautifulSoup(res.content, 'html.parser')
title = soup.find(id='productTitle').get_text()
print(title)
我不断地得到无或空列表,或者我无法提取任何内容,并给我一个属性错误,表示我使用的对象没有属性get_text,这就提出了另一个问题,即如何获取这个简单跨度的文本。 如果有人能帮我解决这个问题,我真的很感激。 提前谢谢。

问题 运行代码并检查
res
值,您将得到一个503错误。这意味着服务不可用()

解决方案 接下来,使用SO post将
headers={“User-Agent”:“Defined”}
添加到
get
请求中似乎是可行的

res = requests.get(url, headers={"User-Agent": "Defined"})
将返回200(正常)响应

扭曲 Amazon实际上会检查网页刮取器,即使您将获得一个页面,打印结果(
print(soup)
)可能会显示以下内容:

<body>
<!--
        To discuss automated access to Amazon data please contact api-services-support@amazon.com.
        For information about migrating to our APIs refer to our Marketplace APIs at https://developer.amazonservices.com/ref=rm_c_sv, or our Product Advertising API at https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html/ref=rm_c_ac for advertising use cases.
-->

...

<h4>Enter the characters you see below</h4>
<p class="a-last">Sorry, we just need to make sure you're not a robot. For best results, please make sure your browser is accepting cookies.</p>
</div>
</div>
import selenium.webdriver

url = 'http://www.amazon.com/Acer-SB220Q-Ultra-Thin-Frame-Monitor/dp/B07CVL2D2S/ref=lp_16225007011_1_7'

driver = selenium.webdriver.Firefox()
driver.get(url)
title = driver.find_element_by_id('productTitle').text
print(title)
打印出来的

Acer SB220Q bi 21.5 Inches Full HD (1920 x 1080) IPS Ultra-Thin Zero Frame Monitor (HDMI & VGA Port), Black
使用selenium的一个小问题是,它比
请求
库慢得多。此外,还会弹出一个新屏幕显示页面,但幸运的是,我们可以使用
无头
驱动程序来处理该屏幕。

问题 运行代码并检查
res
值,您将得到一个503错误。这意味着服务不可用()

解决方案 接下来,使用SO post将
headers={“User-Agent”:“Defined”}
添加到
get
请求中似乎是可行的

res = requests.get(url, headers={"User-Agent": "Defined"})
将返回200(正常)响应

扭曲 Amazon实际上会检查网页刮取器,即使您将获得一个页面,打印结果(
print(soup)
)可能会显示以下内容:

<body>
<!--
        To discuss automated access to Amazon data please contact api-services-support@amazon.com.
        For information about migrating to our APIs refer to our Marketplace APIs at https://developer.amazonservices.com/ref=rm_c_sv, or our Product Advertising API at https://affiliate-program.amazon.com/gp/advertising/api/detail/main.html/ref=rm_c_ac for advertising use cases.
-->

...

<h4>Enter the characters you see below</h4>
<p class="a-last">Sorry, we just need to make sure you're not a robot. For best results, please make sure your browser is accepting cookies.</p>
</div>
</div>
import selenium.webdriver

url = 'http://www.amazon.com/Acer-SB220Q-Ultra-Thin-Frame-Monitor/dp/B07CVL2D2S/ref=lp_16225007011_1_7'

driver = selenium.webdriver.Firefox()
driver.get(url)
title = driver.find_element_by_id('productTitle').text
print(title)
打印出来的

Acer SB220Q bi 21.5 Inches Full HD (1920 x 1080) IPS Ultra-Thin Zero Frame Monitor (HDMI & VGA Port), Black

使用selenium的一个小问题是,它比
请求
库慢得多。此外,还会弹出一个显示页面的新屏幕,但幸运的是,我们可以通过使用
无头驱动程序对该屏幕进行处理。

查看响应的内容。这可能有助于你理解出了什么问题。看看回复的内容。这可能有助于您了解出了什么问题。感谢您的帮助,我将在不久的将来学习selenium以实现自动化,我将尝试使用selenium进行废弃,因为我似乎无法用beautifullsoupNowadays完成任何事情。如今,越来越多的公司正在使用Javascript和反机器人软件。Selenium是一种类似于人类的开发工具。因此,它可以与JS交互,并且(通常)绕过反机器人软件。我在安装selenium时遇到的问题是,您需要安装
selenium
(任何情况下
pip install selenium
),但也需要安装一个依赖于浏览器的驱动程序组件,例如Firefox和chrome。除此之外,easy peasy.谢谢你的帮助,我将在不久的将来学习selenium以实现自动化,我将尝试使用selenium,因为我似乎无法用漂亮的SoupNowadays完成任何事情。如今越来越多的公司正在使用Javascript和反机器人软件。Selenium是一种类似于人类的开发工具。因此,它可以与JS交互,并且(通常)绕过反机器人软件。我在安装selenium时遇到的问题是,您需要安装
selenium
(任何情况下
pip install selenium
),但也需要安装一个依赖于浏览器的驱动程序组件,例如Firefox和chrome。除此之外,简单的豌豆。