BeautifulSoup 有时会出现异常

     2023-02-23     253

关键词:

【中文标题】BeautifulSoup 有时会出现异常【英文标题】:BeautifulSoup sometimes gives exceptions 【发布时间】:2015-02-13 18:01:30 【问题描述】:

奇怪的是,有时 BeautifulSoup 对象确实提供了所需的数据,但有时我会收到类似或 listindex errorout of rangenonetype object does not have attribute findNext() 的错误,这是嵌套在其他元素中的数据。

这是代码:

url = 'http://www.computerstore.nl/product/470130/category-208983/asrock-z97-extreme6.html'
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)

a = soup.find(text=('Socket')).find_next('dd').string

print(a)

【问题讨论】:

【参考方案1】:

实际问题是单元格值并不总是Socket有时被制表符或空格包围。不要检查确切的text 匹配,而是传递compiled regular expression pattern:

import re

soup.find(text=re.compile('Socket')).find_next('dd').get_text(strip=True)

总是打印1150


解释我使用过的“有时”这个词(感谢@carpetsmoker 在 cmets 中的最初提议):

如果您打开页面,然后清理 cookie 并刷新页面,您可能会看到同一页面的两种不同外观:

如您所见,页面上的块排列方式不同。因此,同一个页面有两种不同的外观和 HTML 源代码 - 您看到的是 AB-testing 技术:

在营销和商业智能中,A/B 测试是 有两个变体 A 和 B 的随机实验,它们是 对照实验中的对照和处理。它是一种形式 使用两种变体的统计假设检验导致 技术术语,双样本假设检验,用于以下领域 统计数据。

换句话说,他们正在尝试产品页面并收集统计数据,例如点击率、销售数量等。


仅供参考,这是我目前得到的工作代码:

import re

from bs4 import BeautifulSoup
import requests

session = requests.Session()
headers = 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'
session.get('http://www.computerstore.nl', headers=headers)

response = session.get('http://www.computerstore.nl/product/470130/category-208983/asrock-z97-extreme6.html', headers=headers)
soup = BeautifulSoup(response.content)
print(soup.find(text=re.compile('Socket')).find_next('dd').get_text(strip=True))

【讨论】:

"反网页抓取技术";不,这似乎是 AB 测试;如果您在浏览器中禁用 cookie,并打开几个选项卡,您将在某些页面中获得不同的 HTML 页面 :-) 我试图通过回显 cookie 来保持相同的页面布局,但似乎没有一种明显的方法可以获取您实际查看的页面,因此您被困在同样的问题,但这很丑:-/ @Carpetsmoker 我已经更新了答案——显然是 AB 测试。再次感谢您的提示。 好吧,你说得对,它现在可以工作的套接字,谢谢,但我也有这个问题,因为另外两个数据 'Format Moederbord' 和 'Chipset' 。如果我使用你说的代码而不是'Socket''Formaat Moederbord'或'Chipset',它会再次出现问题,我该如何解决这个问题。 @user3660293 好吧,它适用于Chipset,就像它适用于Socket 一样,但Formaat Moederbord - 这是一个不同的故事,这是你可以找到的方法它(适用于 A 和 B 情况)print(soup.find(text=re.compile('Formaat moederbord')).find_parent(['td', 'dt']).find_next(['td', 'dd']).find_next(['td', 'dd']).get_text(strip=True)).【参考方案2】:

我对您的代码进行了建议更改:

url = 'http://www.computerstore.nl/product/470130/category-208983/asrock-z97-extreme6.html'
source_code = requests.get(url)
plain_text = source_code.text
soup = BeautifulSoup(plain_text)

if soup.find(text=('Socket')):
   a = soup.find(text=('Socket')).find_next('dd').string
else:
   # Display some error info, and/or do some error logging
   print "error"

print(a)

【讨论】:

你应该只发布完整的答案,而不是关于如何改进代码的 cmets。那些可以留在问题上的 cmets 或 pehaps na Answer... 所以,帮助我提高理解力。在 alexce 的原始问题的上下文中,我的答案如何或将成为“完整”答案? 见this help page;它与大多数论坛等有点不同,只提供诸如此类的有用提示就可以了。这样做的最大好处是,当您通过互联网搜索或其他方式进入这样的页面时,它大大减少了“噪音”的数量(在论坛上,您有时会有页面和垃圾页面需要挖掘).. . 感谢帮助页面链接。但是,我没有看到任何提到“完整”答案的内容,我仍然对是什么让我的答案不完整感到困惑?特别是,考虑到我使用了该人的原始问题并补充了我的解决方案。【参考方案3】:

这意味着商店返回的数据由于某种原因不包含您寻找的元素。

在代码中添加一些适当的错误处理,以捕获异常并在中断时转储输入。这样,您可以查看下载的内容并改进代码。

第一步是:

try:
    a = soup.find(text=('Socket')).find_next('dd').string

    print(a)
except:
    print(plain_text)
    raise

如果文本很多,则将其写入文件。

将这么多操作串在一行中也很危险。如果出现问题,那么您将不知道是什么。将其拆分为几行,以便您快速查看是否可以找到Socketdd 元素等。

【讨论】:

“你应该改进你的错误处理”似乎更适合评论而不是回答我......

为啥有时我的页面中的 UI 有时会出现有时不出现?

】为啥有时我的页面中的UI有时会出现有时不出现?【英文标题】:whysometimesUIinmypagessometimesappearssometimesdoesnotappear?为什么有时我的页面中的UI有时会出现有时不出现?【发布时间】:2012-05-3003:13:07【问题描述】:我有小问题为什... 查看详情

在 wcf 客户端代理中调用方法时偶尔出现异常

...nwcfclientproxy【发布时间】:2013-02-1914:44:45【问题描述】:有时,在我的xp机器上,调用自动生成的客户端代理中的方法时会出现异常。我告诉调试器停止所有clr异常。现在有时当我调用以下内容时:publicMyStuff.Entities.PackageGetPackage... 查看详情

异常处理升级版

...样就更好复习了。一、异常概述  在我们日常生活中,有时会出现各种各样的异常,例如:职工小王开车去上班,在正常情况下,小王会准时到达单位。但是天有不测风云,在小王去上班时,可能会遇到一些异常情况,比如小王的车子出... 查看详情

当 cp 没有时,为啥 shutil.copy() 会引发权限异常?

】当cp没有时,为啥shutil.copy()会引发权限异常?【英文标题】:Whywouldshutil.copy()raiseapermissionexceptionwhencpdoesn\'t?当cp没有时,为什么shutil.copy()会引发权限异常?【发布时间】:2012-08-0320:52:36【问题描述】:shutil.copy()引发权限错误... 查看详情

Unity 代码无法缩进,有时会出现故障

】Unity代码无法缩进,有时会出现故障【英文标题】:UnityCodenotworkingasindented,SometimesaGlitchoccurs【发布时间】:2021-09-2718:29:49【问题描述】:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassJamesController:MonoBehav 查看详情

java中异常有时要自己try-catch,有时又throws。还有同时两种都进行。到底该怎么分析处理异常?

try语句可以控制程序在捕获错误时主动处理。而throws则是简单的抛出错误,将错误处理交给上级逻辑处理。一般应用场合应当是没区别的,但是因为不同场合错误处理部分不一样,所以后者更通用些,即不同的人应当自己写处理... 查看详情

异常处理(代码片段)

一、异常有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError异常例子:res=5/0print(res)#运行报错#ZeroDivisionError:divisionbyzero字符串与整型不能相加异常:importrandom... 查看详情

《java程序设计》

...这一章时,我们在运行程序的过程中也会出现某些错误,有时候会提示,用时候不提示。所以建立一个异常,如果程序出现在错误,就会抛出一个异常,从而中断程序。异常分为致命异常和非致命异常。所有的异常都是Throwable继... 查看详情

waveout 有时会出现内存问题

】waveout有时会出现内存问题【英文标题】:waveoutsometimesmemoryissue【发布时间】:2010-02-2318:56:31【问题描述】:此代码可通过平台调用服务使用winmm.dll输出2秒的钢琴音,在XP上似乎可以正常工作,但在windows7rc中waveoutopen失败根据Jo... 查看详情

异常处理tryexcept

 异常处理tryexcept一、try...except有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError例子:?1234a=10b=0c=a/bprint"done"运行结果:Traceback(mostrecentcalllast):File"C:/Users/... 查看详情

java啥时候需要抛出异常

...示成功,返回-1表示失败。这种出错处理方式比较简单,有时你还想知道更多的出错信息。在面向对象语言里,使用异常(其实也是类)就可以很好的解决。把出错信息封装到异常类里面,这样当出错的时候,就可以根据捕获的... 查看详情

C++ stoi 有时会发送带空格的异常

】C++stoi有时会发送带空格的异常【英文标题】:C++stoisometimessendsexceptionwithspaces【发布时间】:2016-05-1913:18:58【问题描述】:所以这对某些人来说可能是一个非常明显的问题,但我不知道从哪里开始处理这个错误。我有一些代码... 查看详情

Heroku Amazon s3 图像 - 有时会出现 403 错误?

】HerokuAmazons3图像-有时会出现403错误?【英文标题】:HerokuAmazons3images-403errorsometimes?【发布时间】:2018-01-1507:53:38【问题描述】:我在Heroku设置了服务器,并使用Amazons3进行图像存储(使用carrierwavegem上传它们),但有时我会收... 查看详情

python之异常处理

一、try...except有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError例子:1234a=10b=0c=a/bprint "done"运行结果:Traceback(mostrecentcalllast):File"C:/Users/lirong/PycharmProjects... 查看详情

为啥在 Windows 上的 Chrome 或 Safari 上查看时,html 文本有时会出现乱码?

】为啥在Windows上的Chrome或Safari上查看时,html文本有时会出现乱码?【英文标题】:WhywouldhtmltextsometimesappeargarbledwhenviewingonChromeorSafarionWindows?为什么在Windows上的Chrome或Safari上查看时,html文本有时会出现乱码?【发布时间】:2011-... 查看详情

为啥 BeautifulSoup 与“从未检索到任务异常”相关?

】为啥BeautifulSoup与“从未检索到任务异常”相关?【英文标题】:WhyisBeautifulSouprelatedto\'Taskexceptionwasneverretrieved\'?为什么BeautifulSoup与“从未检索到任务异常”相关?【发布时间】:2017-08-0610:50:03【问题描述】:我想使用协程来... 查看详情

如何摆脱 BeautifulSoup 用户警告?

】如何摆脱BeautifulSoup用户警告?【英文标题】:HowtogetridofBeautifulSoupuserwarning?【发布时间】:2016-02-0408:08:02【问题描述】:安装BeautifulSoup后,每当我在cmd中运行我的Python时,都会出现此警告。D:\\Application\\python\\lib\\site-packages\\be... 查看详情

使用 SubsamplingScaleImageView 的 Android ViewPager 在滑动图像时有时会出现黑屏

】使用SubsamplingScaleImageView的AndroidViewPager在滑动图像时有时会出现黑屏【英文标题】:AndroidViewPagerusingSubsamplingScaleImageViewresultsinblankscreenforsometimewhenslidingimages【发布时间】:2016-02-2914:06:01【问题描述】:我使用davemorrissey\'sSubsampl... 查看详情