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 ファイルから解析する必要があります。