0

URLから直接解析してもすべてのページ要素がキャプチャされないため、ソースコードをWebサイトからローカルに保存されたhtmlファイルにコピーする必要があります。ソースコードのテーブル内の位置要素を抽出して、ジオコーディングに使用したいと考えています。私のプログラムは検索結果のいくつかのページを調べ、それぞれのソース コードをローカルに保存されている html ファイルに書き込みます。住所要素は各ページの素材の約 3 分の 1 にすぎないため、ファイル サイズを小さくするために追加の要素を削除するとよいでしょう。

これを行うには、書き込み用に空白の html ドキュメントを開き、現在のページのソース コードを書き込み、ドキュメントを閉じ、解析用に再度開き (今は 'r' モードで)、書き込み用に新しいドキュメントを開きます。 、美しいスープを使用して、最初のドキュメントからすべてのジオコーディング データを取得し、それを新しいドキュメントに書き込みます。次に、プログラムは最初のドキュメントを閉じてから、再び「w」モードで開きます。

これはループで行われるため、最初のドキュメントは常に現在のページのソース コードで上書きされますが、2 番目のドキュメントは開いたままになり、ページがなくなるまでジオコーディング データだけが書き込まれます。

ソースコードのループ、ナビゲート、およびファイルへの書き込みはすべて正常に機能していますが、解析部分を理解できません。このコードを使用して、インタラクティブな環境で実験してみました:

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