BeautifulSoup(bs4),html5lib,HTMLParseError:格式错误的开始标记,第1行,第11列

时间:2017-06-30 20:39:54

标签: python bs4 html5lib

我需要将网站上的源代码复制到本地存储的html文件中,因为从URL直接解析不会捕获所有页面元素。我希望在源代码中的表中提取位置元素以用于地理编码。我的程序经过几页搜索结果,将每个源代码写入本地存储的html文件。地址元素只占每个页面材料的三分之一,因此最好除去额外的元素以减小文件大小。

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

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

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

C:\Windows\system32>CD /D U:\

U:\>python -W ignore DailyRates.py
'python' is not recognized as an internal or external command,
operable program or batch file.

U:\>PAUSE
Press any key to continue . . .

我收到以下错误:

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)))

我也试过lxml,ertree,似乎没什么用。我无法直接从url获取需要解析的元素。我需要从html文件解析。

1 个答案:

答案 0 :(得分:0)

data直接传递给BeautifulSoup

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