2016-04-16 1 views
4

Ich versuche, einige einfache Wörterbuchinformationen von einer HTML-Seite zu kratzen. Bis jetzt bin ich in der Lage, alle Wörter zu drucken, die ich auf der IDE benötige. Mein nächster Schritt war, die Wörter in ein Array zu übertragen. Mein letzter Schritt war, das Array als CSV-Datei zu speichern ... Wenn ich meinen Code ausführe, scheint er keine Informationen nach dem 1309. oder 1311. Wort aufzunehmen, obwohl ich glaube, dass es über 1 Million auf der Webseite gibt. Ich stecke fest und wäre sehr dankbar für jede Hilfe. DankePython BeautifulSoup csv scraping

from bs4 import BeautifulSoup 
from urllib import urlopen 
import csv 

html = urlopen('http://www.mso.anu.edu.au/~ralph/OPTED/v003/wb1913_a.html').read() 

soup = BeautifulSoup(html,"lxml") 

words = [] 

for section in soup.findAll('b'): 

    words.append(section.renderContents()) 

print ('success') 
print (len(words)) 

myfile = open('A.csv', 'wb') 
wr = csv.writer(myfile) 
wr.writerow(words) 

enter image description here

Antwort

1

ich nicht in der Lage war, das Problem zu reproduzieren (immer 11616 Artikel bekommen), aber ich vermute, dass Sie beautifulsoup4 oder lxml installierten Versionen veraltet sind. Upgrade:

pip install --upgrade beautifulsoup4 
pip install --upgrade lxml 

Natürlich ist dies nur eine Theorie.

0

Ich vermute, dass ein Großteil Ihres Problems darin liegt, wie Sie den gescrapten Inhalt verarbeiten. Müssen Sie den gesamten Inhalt abkratzen, bevor Sie ihn in die Datei ausgeben? Oder kannst du es tun, wie du gehst?

Anstatt sich immer wieder an eine Liste anzuhängen, sollten Sie yield verwenden.

def tokenize(soup_): 
    for section in soup_.findAll('b'): 
     yield section.renderContents() 

Sie Das wird einen Generator geben, solange section.renderContents() einen String zurückgibt, kann das csv-Modul ohne Probleme schreiben.