0

特定のウェブサイトでテキストを抽出したい。これが、スクレーパーを作成するためにテキストを抽出したいWebアドレスです。 http://news.search.naver.com/search.naver?sm=tab_hty&where=news&query=times&x=0&y=0 このページでは、件名とコンテンツフィールドを別々に含むテキストを抽出したいと思います。たとえば、そのページを開くと、ページにテキストが表示されます。

JAPAN TOKYO INTERNATIONALFILMFESTIVALEPA연합뉴unicorn세계| 2009.10.25(일)오후7:21日本、2009年10月25日。ゲイトは、フランスの映画製作者シャビモリア監督の映画「エイトタイムズアップ」での彼女の役割で最優秀女優賞を受賞しました。EPA / DAI KUROKAWA

JAPAN TOKYO INTERNATIONALFILMFESTIVALEPA연합뉴unicorn세계| 2009.10.25(일)오후7:18彼女は、第22回東京の授賞式で、フランスの映画監督シャビ・モリアの映画「エイト・タイムズ・アップ」で主演女優賞を受賞したことを知りました。

等々 、、、、

そして最後に、フォーマットのようなテキストを抽出したい

件名:JAPAN TOKYO INTERNATIONAL FILM FESTIVAL CONTENT:EPA연합뉴unicorn세계| 2009.10.25(일)오후7:21日本、2009年10月25日。ゲイトは、フランスの映画製作者シャビモリア監督の映画「エイトタイムズアップ」での彼女の役割で最優秀女優賞を受賞しました。EPA / DAI KUROKAWA

件名:...コンテンツ:..。

AND SO ON ..誰かが助けてくれたら、本当に感謝します。前もって感謝します。

4

1 に答える 1

2

一般に、このような問題を解決するには、最初に目的のページをテキストとしてダウンロードする必要があります(curlやwgetなどの外部ユーティリティを使用しますが、Javascriptが実行される前urllib.urlopenにページがどのように表示されるかを確認したいので、ブラウザはダウンロードしないでください。実行するチャンス)そしてそれを研究してその構造を理解します。この場合、いくつかの調査の結果、関連する部分が次のようになっていることがわかります(関連性のない部分をいくつか挿入し、読みやすくするために線を分割します)...:head

<body onload=nx_init();>
 <dl>
 <dt>
<a href="http://news.naver.com/main/read.nhn?mode=LSD&mid=sec&sid1=&oid=091&aid=0002497340"
 [[snipping other attributes of this tag]]>
JAPAN TOKYO INTERNATIONAL FILM FESTIVAL</a>
</dt>
 <dd class="txt_inline">
EPA¿¬ÇÕ´º½º ¼¼°è <span class="bar">
|</span>
 2009.10.25 (ÀÏ) ¿ÀÈÄ 7:21</dd>
 <dd class="sh_news_passage">
 Japan, 25 October 2009. Gayet won the Best Actress Award for her role in the film 'Eight <b>
Times</b>
 Up' directed by French filmmaker Xabi Molia. EPA/DAI KUROKAWA</dd>

などなど。したがって、「subject」として、<a>内のタグのコンテンツを<dt>、「content」として、<dd>それに続くタグのコンテンツ(同じ<dl>)が必要です。

取得するヘッダーには次のものが含まれます。

Content-Type: text/html; charset=ks_c_5601-1987

したがって、そのエンコーディングをUnicodeに解釈する方法も見つける必要があります。エンコーディングはとしても知られている'euc_kr'と思います。私のPythonインストールにはコーデックが付属しているようですが、自分のコーデックも確認する必要があります。

これらすべての側面を決定したらlxml.etree.parse、URLを試してみてください。他の多くのWebページと同様に、URLは解析されません。実際には整形式のHTMLは表示されません(w3cのバリデーターを試してみてください)。それが壊れているいくつかの方法について調べてください)。

不正な形式のHTMLはWebで非常に一般的であるため、一般的なエラーを補正しようとする「耐性のあるパーサー」が存在します。Pythonで最も人気のあるのはBeautifulSoupであり、実際にlxmlが付属しています。lxml2.0.3以降では、BeautifulSoupを基になるパーサーとして使用し、ドキュメントが正しく解析されたかのように続行できます。 BeautifulSoupを直接使用する方が簡単です。

たとえば、そのURLで最初のいくつかのサブジェクト/コンテンツペアを出力するスクリプトを次に示します(これらは現在変更されており、元々は指定したものと同じでした;-)。Unicode出力をサポートするターミナルが必要です(たとえば、MacのTerminal.Appをutf-8に設定して問題なく実行します)-もちろん、printsの代わりにUnicodeフラグメントを収集できます(たとえば、リストと''.join必要なものがすべて揃ったらそれらを)、好きなようにエンコードします。

from BeautifulSoup import BeautifulSoup
import urllib

def getit(pagetext, howmany=0):
  soup = BeautifulSoup(pagetext)
  results = []
  dls = soup.findAll('dl')
  for adl in dls:
    thedt = adl.dt
    while thedt:
      thea = thedt.a
      if thea:
        print 'SUBJECT:', thea.string
      thedd = thedt.findNextSibling('dd')
      if thedd:
        print 'CONTENT:',
        while thedd:
          for x in thedd.findAll(text=True):
            print x,
          thedd = thedd.findNextSibling('dd')
        print
      howmany -= 1
      if not howmany: return
      print
      thedt = thedt.findNextSibling('dt')

theurl = ('http://news.search.naver.com/search.naver?'
          'sm=tab%5Fhty&where=news&query=times&x=0&y=0')
thepage = urllib.urlopen(theurl).read()
getit(thepage, 3)

lxmlのロジック、または「lxml衣類のBeautifulSoup」はそれほど違いはなく、さまざまなナビゲーション操作のスペルと大文字の区別が少し変わります。

于 2009-10-25T19:01:12.573 に答える