gpt4 book ai didi

python - 如何从损坏的关键参数中获取信息 - BS4 和 Requests(Python)

转载 作者:行者123 更新时间:2023-12-01 02:19:33 25 4
gpt4 key购买 nike

我正在尝试使用 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" 永远不会为真,因为它不是 DomesticTotal 之间的空格,而是换行符。

一种方法是通过 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com