- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 python、Requests 和 BeautifulSoup 从像这样的 HTML 页面获取一些信息。
我的问题是,我无法通过 BeautifulSoup 获得关键参数(例如“开始股票”和“国内粉碎”),因为他们的“输入”错误破坏了名称。
这很奇怪,因为在网站上他们并没有“破产”。我以前从未见过这个。
<m1_region_group2 region4="World 2/">
<m1_attribute_group2_collection>
<m1_attribute_group2 attribute4="Beginning
Stocks">
<cell cell_value4="77.73"></cell>
</m1_attribute_group2>
<m1_attribute_group2 attribute4="Production">
<cell cell_value4="313.77"></cell>
</m1_attribute_group2>
<m1_attribute_group2 attribute4="Imports">
<cell cell_value4="133.33"></cell>
</m1_attribute_group2>
<m1_attribute_group2 attribute4="Domestic
Crush">
<cell cell_value4="275.36"></cell>
</m1_attribute_group2>
<m1_attribute_group2 attribute4="Domestic
Total">
<cell cell_value4="314.35"></cell>
</m1_attribute_group2>
<m1_attribute_group2 attribute4="Exports">
<cell cell_value4="132.55"></cell>
</m1_attribute_group2>
<m1_attribute_group2 attribute4="Ending
Stocks">
<cell cell_value4="77.92"></cell>
</m1_attribute_group2>
</m1_attribute_group2_collection>
</m1_region_group2>
“进口”和“生产”参数效果很好。例如:
x.find("m1_attribute_group2", {"attribute4":"Imports"}).find("cell")["cell_value4"]
它返回“133.33”。
但是当我尝试获取国内总计时,结果是“无”,就像 BS 找不到参数一样。
z = x.find("m1_attribute_group2", {"attribute4":"Domestic Total"})
有人知道这是怎么回事吗?我该如何修复它?
Mac OS Hight Sierra/Python3.6
最佳答案
这只是一个格式不正确的 HTML,BeautifulSoup
仍然能够解析。只是 attribute4="Domestic Total"
永远不会为真,因为它不是 Domestic
和 Total
之间的空格,而是换行符。
一种方法是通过 find()
方法解决问题,使用 a function对于 attribute4
属性值,拆分并重新连接,这将有效地删除所有换行符并用空格替换它们:
In [19]: soup.find("m1_attribute_group2", attribute4=lambda x: x and " ".join(x.split()) == "Domestic Total")
Out[19]:
<m1_attribute_group2 attribute4="Domestic
Total">
<cell cell_value4="314.35"></cell>
</m1_attribute_group2>
然后您可以将其概括为:
def filter_attribute(attr_value):
def f(attr):
return attr and " ".join(attr.split()) == attr_value
return f
并使用:
In [23]: soup.find("m1_attribute_group2", attribute4=filter_attribute("Domestic Total"))
Out[23]:
<m1_attribute_group2 attribute4="Domestic
Total">
<cell cell_value4="314.35"></cell>
</m1_attribute_group2>
<小时/>
另一种方法是使用 a regular expression和 \s+
作为单词之间的分隔符,其中 \s+
表示“一个或多个空格字符,包括换行符”:
In [24]: soup.find("m1_attribute_group2", attribute4=re.compile(r"Domestic\s+Total"))
Out[24]:
<m1_attribute_group2 attribute4="Domestic
Total">
<cell cell_value4="314.35"></cell>
</m1_attribute_group2>
关于python - 如何从损坏的关键参数中获取信息 - BS4 和 Requests(Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48085980/
我正在尝试运行基于 angular2 的第一个应用程序。我关注了angular2脚步。当我运行命令 npm start 然后它在终端中给出以下错误 Did not detect a bs-config
×
我在 stackovefflow 上搜索并没有找到这个问题的答案。我是 Angular 2 的新手,我正在创建一个演示应用程序,但是当我执行 npm start 时,此消息显示在终端/控制台上。虽然它
如果 .popover() 之后变成 .on('hidden.bs.popover'),我想'销毁'是 .on('shown.bs.popover' 所以它不会再 'show' 。一切似乎都正确,但看
我在玩 vimgolf challenge 时遇到了以下问题: :%s/V/i?/giiZZ 我认为意思是“退格键”,但是当我在键盘的命令行模式下按退格键时,它只是删除了“?” (我正在使用带有 Mi
我正在制作一个 BS 轮播。当浏览器较小且文本未居中时,图像看起来不合适并且不会完全覆盖轮播。我该如何解决这个问题?我还没有找到可以帮助我的答案。 这是我的 CSS: .carousel-inn
在优势网格中,当单击另一个分区时,一个分区的卡体会折叠。然而,另一个网格并没有发生同样的情况(缺点)。当我们单击劣势部分的一个分区时,当我们再次单击劣势部分的另一个分区时,它不会被折叠。然而,这是在优
在下面的代码中,我正在学习如何创建 2 列,并将左列用作可滚动的导航栏。我这里还处于零阶段,所以请原谅质量! 我在将 .sidebar 类设置为左栏中的 "position:fixed" 时遇到了问题
我尝试使用 javascript 动态 + bs + python 进行网页抓取,并且我阅读了很多内容来编写此代码,例如,我尝试在著名网站上抓取使用 javascript 呈现的价格: from bs
我想在右侧的标题中添加一个额外的小元素,该元素与右侧对齐,如下所示: Headersubheadersubheader right 但是右侧的 span 元素放置得更高/与第一个小元素不在一条直线上。
我正在使用 BS3 并且有这样的选项卡: Annual Summary Monthly Summary 我在第一个选项卡中有一个像这样的链接:
有谁知道如何在使用 css 打开或关闭时更改 bootstrap 4 navbar-toggler-icon?我认为这很简单,但我真的找不到任何东西。 .map-controls-mobile .na
大家好……我想从网页上的表格中选择一个关于特定位置的词。源代码如下: table = ''' Code: BAN Color: White ''
我正在尝试使用现有代码库配置 gcov 以实现代码覆盖。现有代码base 是基于服务的代码库(即包含多个文件 c 和 cpp 以及一项服务) 我已经关注了配置 gcov 的 wiki 页面并添加了 -
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我在 FlashBuilder 中开发了一个浏览器部署的全文搜索应用程序,该应用程序以 REST 方式与远程 Web 服务器进行通信。该软件适合一个小众市场——它适用于古代语言而不是现代语言,我不可能
我正在尝试使用 Angular 带的 Bootstrap 工具提示编写简单的代码。我发现使用 bs-tooltip 时 AngularJs 数据绑定(bind)不起作用。 绑定(bind)不起作用
我使用 bootstrap modal + slick slider 在 bs modal 窗口中显示 slider ,但在显示时遇到一些问题。自动播放之前 slider 未打开 not work 但
我正在尝试从引导下拉列表中捕获事件。似乎什么都不起作用,尽管显然我做错了什么。 代码,精简为问题...... Dem
为什么 loaded.bs.modal 事件从 Bootstrap 4 中删除?有什么东西可以代替它吗? shown.bs.modal 非常相似,但它不会等待模态完全加载,而只是显示。 最佳答案 基本
我是一名优秀的程序员,十分优秀!