提供されているようなHTMLスクレイパーを使用しようとしています ここ 。彼らが提供した例では問題なく動作します。ただし、 webpage で使用しようとすると、このエラーが発生します--Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.
グーグルを試しましたが、解決策が見つかりませんでした。助けていただければ幸いです。 Pythonを使用してHTMLとしてコピーする方法があるかどうか知りたいのですが。
編集:
from lxml import html
import requests
page = requests.get('http://cancer.sanger.ac.uk/cosmic/gene/analysis?ln=PTEN&ln1=PTEN&start=130&end=140&coords=bp%3AAA&sn=&ss=&hn=&sh=&id=15#')
tree = html.fromstring(page.text)
ありがとうございました。
簡単な答え:page.content
ではなくpage.text
を使用してください。
から http://lxml.de/parsing.html#python-unicode-strings :
lxml.etreeのパーサーはUnicode文字列をすぐに処理できます...ただし、これには、Unicode文字列自体が競合するエンコーディングを指定していないため、実際のエンコーディングについて嘘をついている必要があります
から http://docs.python-requests.org/en/latest/user/quickstart/#response-content :
リクエストは、サーバーからのコンテンツを[
r.text
として]自動的にデコードします。 ...応答本文にバイトとして[r.content
として]アクセスすることもできます。
ご覧のとおり、requests.text
とlxml.etree
の両方がutf-8をUnicodeにデコードしたいと考えています。しかし、requests.text
にデコードを行わせると、xmlファイル内のencodingステートメントは嘘になります。
それでは、requests.content
にデコードを行わせないようにしましょう。そうすれば、lxml
は一貫してデコードされていないファイルを受け取ります。