![](/img/trans.png)
[英]BeautifulSoup (bs4): How to ignore ending tag in malformed HTML
[英]BeautifulSoup (bs4), html5lib, HTMLParseError: malformed start tag, at line 1, column 11
我需要将网站的源代码复制到本地存储的html文件中,因为直接从url进行解析无法捕获所有页面元素。 我希望在源代码的表中提取位置元素以用于地理编码。 我的程序遍历了几页搜索结果,将每一页的源代码写入本地存储的html文件中。 地址元素仅占每页材料的三分之一,因此最好删除其他元素以减小文件大小。
为此,我希望程序打开一个空白的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)))
a:
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,但似乎没有任何效果。 我无法直接从网址获取需要解析的元素。 我需要从html文件进行解析。
将data
直接传递给BeautifulSoup
:
soup = BeautifulSoup(data,'html.parser')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.