0

我需要将源代码从网站复制到本地存储的 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)))

唉:

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 文件中解析。

4

1 回答 1

0

直接传递dataBeautifulSoupas :

soup = BeautifulSoup(data,'html.parser')
于 2017-06-30T21:12:39.227 回答