1

コーデックを含むこの特定の HTML ページがあります

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">

BeautifulSoup を使用してこの特定のファイルを解析しようとすると、常に NULL オブジェクトが返されます。次を使用して変換できます。

page = codecs.open('file_name', 'r', 'cp1251')
soup = BeautifulSoup(page.read())

今では正常に動作しています。しかし、私のコレクションには、UTF-8windows-1251の両方の文字セット タイプで構成されるページがあります。それで、特定の HTML ページの文字セットを決定し、それが windows-1251 形式の場合はそれに応じて変換する手順を知りたいと思いました。

私はこれを見つけました:

soup.originalEncoding

しかし、そのためには「スープ」にロードする必要があります。しかし、「None type object」を返すだけです。どんな助けでも大歓迎です。

私はPython 2.7を使用しています

編集:

これが私が実際に言おうとしていることの例です:

これは私のコードです:

from bs4 import BeautifulSoup
import urllib2

page=urllib2.urlopen(Page_link)
soup = BeautifulSoup(page.read())

print soup.html.head.title

持っているページ

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ページのタイトルを正しく表示します。

ページに

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">

出力は

AttributeError: 'NoneType' オブジェクトには属性 'head' がありません

これで、上記のコーデック ライブラリを使用してこれを修正できます。私が見つけようとしているのは、エンコーディングを適用できるようにする方法です。

これらは、特定の情報をクロールして収集しようとしている 2 つのサイトです。

http://www.orderapx.com/およびhttp://www.prpoakland.com/

4

1 に答える 1

1

Web からページを読み込んでいます。パラメーターを含むコンテンツ タイプ ヘッダーを探してcharset、Web サーバーがエンコーディングについて既に通知しているかどうかを確認します。

charset = page.headers.getparam('charset')
soup = BeautifulSoup(page.read(), from_encoding=charset)

そのようなパラメーターが存在しない場合は、charsetに設定されNone、BeautifulSoup は推測にフォールバックします。

さまざまなパーサーを試すこともできます。HTML の形式が正しくない場合、さまざまなパーサーがさまざまな方法で HTML を修復し、おそらく BeautifulSoup がエンコーディングをより適切に検出できるようにします。

于 2013-09-30T07:51:59.123 に答える