BeautifulSoup (bs4), html5lib, HTMLParseError: malformed start tag, at line 1, column 11

BeautifulSoup (bs4), html5lib, HTMLParseError: malformed start tag, at line 1, column 11

我需要将网站的源代码复制到本地存储的 html 文件中,因为直接从 url 解析不会捕获所有页面元素。我希望提取源代码中 table 内的位置元素以用于地理编码。我的程序遍历几页搜索结果,将每页的源代码写入本地存储的 html 文件。地址元素仅占每页 material 的三分之一左右,因此最好去掉额外的元素以减小文件大小。

为此,我希望程序打开一个空白的html文档进行写入,将当前页面的源代码写入其中,关闭文档,重新打开它进行解析(在'r'模式),打开一个新文档进行写作,并使用美丽的汤从第一个文档中捕获所有地理编码数据并将其写入新文档。然后程序将关闭第一个文档,然后再次以 'w' 模式重新打开它。

这将在一个循环中完成,因此第一个文档将始终被当前页面的源代码覆盖,而第二个文档将保持打开状态并继续只写入地理编码数据,直到没有更多页面为止。

循环和导航以及将源代码写入文件的一切都工作正常,但我无法弄清楚解析部分。我尝试使用以下代码在交互式环境中进行试验:

from bs4 import BeautifulSoup
import html5lib

data = open(r"C:\GIS DataBase\web_resutls_raw_new_test.html",'r').read()
document = html5lib.parse(data)
soup = BeautifulSoup(str(document))

我收到以下错误:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python27\lib\bs4\__init__.py", line 228, in __init__
    self._feed()
  File "C:\Python27\lib\bs4\__init__.py", line 289, in _feed
    self.builder.feed(self.markup)
  File "C:\Python27\lib\bs4\builder\_htmlparser.py", line 219, in feed
    raise e
HTMLParseError: malformed start tag, at line 1, column 11

所以我尝试了以下修复:

soup = HTMLParser.handle_starttag(BeautifulSoup(str(document)))

唉:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python27\lib\bs4\__init__.py", line 228, in __init__
    self._feed()
  File "C:\Python27\lib\bs4\__init__.py", line 289, in _feed
    self.builder.feed(self.markup)
  File "C:\Python27\lib\bs4\builder\_htmlparser.py", line 219, in feed
    raise e
HTMLParseError: malformed start tag, at line 1, column 11

我也尝试过使用 lxml、ertree,但似乎没有任何效果。我无法直接从 url 中获取需要解析的元素。我需要从 html 文件中解析。

data 直接传递给 BeautifulSoup 作为:

soup = BeautifulSoup(data,'html.parser')