【问题标题】:why i keep getting none or empty lists when trying to scrape any data with BeautifulSoup in python为什么我在尝试用 Python 中的 BeautifulSoup 抓取任何数据时一直没有得到任何列表或空列表
【发布时间】:2021-02-12 00:28:36
【问题描述】:

我试图使用包含标题的 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,这引发了另一个问题,即如何获取这个简单跨度的文本. 如果有人能弄清楚并帮助我,我真的很感激。 提前致谢。

【问题讨论】:

  • 看看响应的内容。它可能会帮助您了解出了什么问题。

标签: python python-3.x beautifulsoup python-requests


【解决方案1】:

问题

运行您的代码并检查res 值,您会收到一个503 错误。这意味着服务不可用 (htttp status 503)。

解决方案

使用this SO 帖子跟进,似乎将headers={"User-Agent":"Defined"} 添加到get 请求确实有效。

res = requests.get(url, headers={"User-Agent": "Defined"})

将返回 200(OK)响应。

扭曲

亚马逊实际上会检查网络抓取工具,即使您会返回一个页面,打印结果 (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>

计数器

但是您可以使用selenium 来模拟人类。对我来说,一个最小的工作示例如下:

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 的一个小问题是它比 requests 库慢得多。还会弹出一个显示该页面的新屏幕,但幸运的是,我们可以使用headless 驱动程序对该屏幕进行一些操作。

【讨论】:

  • 感谢您的帮助,我将在不久的将来学习 selenium 以实现自动化,我将尝试将其用于报废,因为我似乎无法使用 beautifullsoup 完成任何事情
  • 现在越来越多的公司正在使用 Javascript 和 Anti bot 软件。 Selenium 是一种类似于人类的开发工具。因此它可以与 JS 交互并(通常)绕过反机器人软件。我在安装 selenium 时遇到的问题是您需要安装 selenium(任何情况下为 pip install selenium),还需要安装依赖于您的浏览器的驱动程序组件,例如用于 Firefox 的 geckodriver 和用于 chrome 的 chromedriver。除此之外,很容易。
猜你喜欢
  • 2014-07-24
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多