Frage

Ich möchte einen Text in bestimmten Webseite extrahieren. hier ist Web-Adresse, was ich einen Text extrahieren möchten Schaber zu machen. http: //news.search.naver. com / search.naver? sm = tab_hty & where = news & query = Zeiten & x = 0 & y = 0 Diese Seite möchte ich mit dem Betreff und Inhalt Feld separat einen Text extrahieren. wenn Sie die Seite zum Beispiel öffnen, können Sie einen Text in-Seite,

JAPAN TOKYO INTERNATIONAL FILM FESTIVAL     EPA 연합 뉴스 세계 | 2009.10.25 (일) 오후 7.21     Japan, 25 Oktober 2009. Gayet den Preis als beste Schauspielerin für ihre Rolle in dem Film gewann ‚Acht Mal Up‘ von Französisch Filmemacher Xabi Molia gerichtet. EPA / DAI KUROKAWA

JAPAN TOKYO INTERNATIONAL FILM FESTIVAL     EPA 연합 뉴스 세계 | 2009.10.25 (일) 오후 7.18     sie erfährt, dass sie den Preis als beste Schauspielerin für ihre Rolle in dem Film ‚Acht Mal Up‘ von Französisch Regisseur Xabi Molia bei der Verleihung der 22. Tokyo ...

gewonnen

und so weiter ,,,,

und schließlich mag ich Text so wie Format extrahieren

THEMA: JAPAN TOKYO INTERNATIONAL FILM FESTIVAL INHALT: EPA 연합 뉴스 세계 | 2009.10.25 (일) 오후 7.21 Japan, den 25. Oktober 2009. Gayet den Preis als beste Schauspielerin für ihre Rolle in dem Film gewann ‚Acht Mal Up‘ von Französisch Filmemacher Xabi Molia gerichtet. EPA / DAI KUROKAWA

THEMA: ... INHALT: ...

und so weiter .. wenn jemand helfen, wirklich zu schätzen wissen. Vielen Dank im Voraus.

War es hilfreich?

Lösung

In der Regel, um solche Probleme zu lösen, müssen Sie zuerst die Seite von Interesse als Text (Verwendung urllib.urlopen oder irgendetwas anderes herunterladen, auch externe Dienstprogramme wie curl oder wget, aber kein Browser, da Sie sehen wollen, wie die Seite aussieht < em> vor jeder Javascript hat eine Chance zu laufen) hat und studieren sie ihre Struktur zu verstehen. In diesem Fall nach einiger Studie, werden Sie die entsprechenden Teile (snipping einige irrelevanten Teile in head und Bruchlinien bis zur besseren Lesbarkeit) finden ...:

<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>

und so weiter. Also, wollen Sie als „Subjekt“ der Inhalt eines <a>-Tages in einem <dt>, und als „Inhalt“ der Gehalt an <dd> Tags folgendes es (in dem gleichen <dl>).

Die Header erhalten Sie enthalten:

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

so müssen Sie auch einen Weg finden, der diese Codierung in Unicode zu interpretieren - Ich glaube, dass Codierung auch als 'euc_kr' bekannt ist und meine Python-Installation erscheint mit einem Codec dafür zu kommen, aber Sie sollen Sie überprüfen, zu

Wenn Sie alle diese Aspekte bestimmt haben, versuchen Sie die URL lxml.etree.parse - und, wie so viele andere Web-Seiten, es nicht analysieren - es ist nicht wirklich vorhanden gut gebildet HTML (W3Cs versuchen Validatoren auf sie über einige der Möglichkeiten, um herauszufinden, es kaputt ist).

Weil schlecht Bildet HTML so häufig auf dem Netz ist, gibt es „tolerant Parser“, die für häufige Fehler zu kompensieren versuchen. Die beliebtesten in Python ist BeautifulSoup, und in der Tat kommen lxml mit ihm - mit lxml 2.0.3 oder höher können Sie BeautifulSoup als die zugrunde liegenden Parser verwenden, dann gehen „als ob“ das Dokument korrekt analysiert hatte - aber ich finde, es einfacher BeautifulSoup direkt zu verwenden.

Zum Beispiel, hier ist ein Skript der erste Thema / Inhalt Paare zu dieser URL zu emittieren (sie zur Zeit geändert hat, ursprünglich sie das gleiche zu sein waren, wie Sie geben ;-). Sie benötigen ein Terminal, das Unicode-Ausgabe unterstützt (zum Beispiel, ich laufe dies ohne Problem auf einem Terminal.App Mac auf utf-8) - natürlich anstelle der prints können Sie sonst die Unicode-Fragmente sammeln (zB hängen Sie sie an eine Liste und sie ''.join, wenn Sie alle erforderlichen Teile) haben, kodieren sie Sie aber wünschen, etc, etc.

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)

Die Logik in lxml oder „BeautifulSoup in lxml Kleidung“, ist nicht sehr verschieden, nur die Rechtschreibung und die Aktivierung der verschiedenen Navigationsoperationen ändert sich ein wenig.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top