我正在(抓住网站)工作(第一次)。我试图从网站拉出纬度(十进制度)。我设法拔出包含信息的正确父节点,但我仍然坚持如何从中提取实际数字。我所做的所有搜索只告诉我如果我知道字符串(我不知道)或字符串是否在子节点中,它是如何将其拉出来的。任何帮助都会很棒。
这是我的代码:
a_string = soup.find(string="Latitude in decimal degrees")
a_string.find_parents("p")
Out[46]: [<p><b>Latitude in decimal degrees</b><font size="-2">
(<a href="definitions.html#LAT" target="_blank"><u>see definition</u></a>)
</font><b>:</b> 35.7584895</p>]
test = a_string.find_parents("p")
print(test)
[<p><b>Latitude in decimal degrees</b><font size="-2"> (<a
href="definitions.html#LAT" target="_blank"><u>see definition</u></a>)</font>
<b>:</b> 35.7584895</p>]
我需要拔出35.7584895并将其保存为对象,以便将其附加到数据集中。
我正在使用Beautiful Soup 4和python 3
答案 0 :(得分:1)
首先要注意的是,由于您使用了find_parents
方法(复数),test
是一个列表。你只需要第一项。
我会通过这样做模拟你的情况。
>>> import bs4
>>> HTML = '<p><b>Latitude in decimal degrees</b><font size="-2"> (<a href="definitions.html#LAT" target="_blank"><u>see definition</u></a>)</font><b>:</b> 35.7584895</p>'
>>> item_soup = bs4.BeautifulSoup(HTML, 'lxml')
恢复文本内容的最简单方法是执行此操作:
>>> item_soup.text
'Latitude in decimal degrees (see definition): 35.7584895'
但是,你想要这个号码。你可以通过各种方式得到这个,其中两个出现在我的脑海中。我将前一个语句的结果分配给str
,以便我可以操作结果。
>>> str = item_soup.text
一种方法是搜索冒号。
>>> str[1+str.rfind(':'):].strip()
'35.7584895'
另一种是使用正则表达式。
>>> bs4.re.search(r'(\d+\.\d+)', str).groups(0)[0]
'35.7584895'