【问题标题】:Extract a string by webscraping using python使用python通过网络抓取来提取字符串
【发布时间】:2018-11-01 22:03:34
【问题描述】:

以下是 HTML 文件的一部分:

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

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

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

但输出是:

Address:

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

【问题讨论】:

  • 只有单词“address:”在<strong>标签内,实际地址在另一个元素内。看起来您需要查看 <br> 标记而不是
  • 不要发布文本图像,而是将实际文本直接复制并粘贴到您的帖子中。文本图像不易解析、搜索或访问。
  • @G.Anderson <br> 标签始终为空。 HTML 对于解析这些数据的结构是次优的。将需要获取 <strong> 之后的文本节点。

标签: python web-scraping


【解决方案1】:

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

...<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 function 将字符串切割成一个列表,删除你分割的部分。 所以第一个拆分给出['... &lt;strong&gt;', '\n\" 1000 Space Park...' ],我们只取第二个项目[1]。然后我们用&lt; 重新拆分它,它给出了&lt;br&gt; 之前的所有内容以及我们不关心的一些其他内容,所以第一个元素是一个守门员[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.

【讨论】:

  • 感谢您的帮助。但是我正在抓取的文件中还有数千个相同格式的其他链接。所以我必须在链接上执行一个 for 循环。因此,我认为在这种情况下复制 HTML 文件是行不通的。不知何故,我必须在字符串中找到包含文本的标签。
猜你喜欢
  • 2020-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2017-08-14
  • 2019-12-14
  • 1970-01-01
  • 2017-12-21
相关资源
最近更新 更多