python - 使用python通过网络抓取来提取字符串
问题描述
以下是 HTML 文件的一部分:
我只想抓取突出显示的行。这是一个大文件的一部分。对于这部分,我尝试了:
container5 = container1[1 ].findAll("strong")
container6 = (container5[6]).text
print(container6)
但输出是:
Address:
如何提取包含" "
图像部分内地址的字符串?
解决方案
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.
推荐阅读
- python - 使用 Selenium 和 Python 在网页的特定列中搜索文本
- ms-access - 如何修复 MS-Access 中的错误代码 2001?
- c# - 如何组合多个 Func
在 C# 的 for 循环中动态地 - javascript - 如何在初始构建期间为 webpack-dev-server 设置占位符?
- elasticsearch - 从 Painless 脚本执行 OS 命令
- ssl - Curl 说证书已过期 (10) 但过期日期在未来
- android - 我如何获得以前 Fragment android kotlin 的名称?
- flutter - 'owner!._debugCurrentBuildTarget == this': 不正确
- tags - 哪个 API 端点将允许我通过 Slack @tag 查找用户信息
- python - Conda 为所有安装/更新命令返回“发现彼此不兼容的以下规范”