首页 > 解决方案 > 使用python通过网络抓取来提取字符串

问题描述

以下是 HTML 文件的一部分:

我只想抓取突出显示的行。这是一个大文件的一部分。对于这部分,我尝试了:

container5 = container1[1 ].findAll("strong")

container6 = (container5[6]).text
print(container6)

但输出是:

Address:

如何提取包含" "图像部分内地址的字符串?

标签: pythonweb-scraping

解决方案


split()我喜欢使用 python函数来解析这类事情。需要注意的是数据周围的重复模式。

...<strong>SOME-Field-Name:</strong> ...
"The desired value"
<br> ...

此模式为您提供了代码可以工作的地方,因此为某些代码提供了一种方法:

html = "... <strong>Address:</strong>\n\" 1100 Space Park etc.\"\n<br>\n ..."

# extract the Address field, between it's heading and </br>
field = html.split("Address:</strong>")[1].split("<")[0].strip()

# Trim away the quotes and whitespace
value = field.split("\"")[1].strip()

输出:

>>> value
'1100 Space Park etc.'

split 函数将字符串切割成一个列表,删除你分割的部分。所以第一个拆分给出['... <strong>', '\n\" 1000 Space Park...' ],我们只取第二个项目[1]。然后我们用 重新分割它<,它给出了 之前的所有内容<br>以及我们不关心的其他一些东西,所以第一个元素是 keeper [0]

我们用 清理一些空格strip(),然后取消引用结果。

使用这种方法,您也可以获取其他值。可能是最好的功能。

def getField(html, field_name):
    # TODO - add some error checking for when not found, etc.
    field = html.split(field_name+":</strong>")[1].split("<")[0].strip()
    value = field.split("\"")[1].strip()
    return value

address = getField(html, "Address")
size    = getField(html, "Gross SqFt")
power   = getField(html, "Total Power")
# etc.

推荐阅读