2016-04-16 18 views
4

htmlページから簡単な辞書情報を削り取ろうとしています。これまで私はIDE上で必要なすべての単語を印刷することができました。私の次のステップは、単語を配列に転送することでした。私の最後のステップは、csvファイルとして配列を保存することでした...私は私のコードを実行すると、1309または1311番目の単語の後に情報を取ることをやめているようですが、Webページには100万を超えると信じています。私は立ち往生し、どんな助けにも非常に感謝しています。あなたはPython BeautifulSoup to 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

答えて

1

私は(常に11616個のアイテムを取得)問題を再現することができませんでしたありがとう、私はあなたがインストールbeautifulsoup4またはlxmlバージョンが古いている疑いがあります。アップグレード:

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

もちろん、これは単なる理論に過ぎません。

0

スクラップしたコンテンツをどのように処理しているかは、問題が多いと思われます。ファイルに出力する前にすべてのコンテンツをスクラップする必要がありますか?それともあなたが行くようにすることができますか?

リストに繰り返し追加するのではなく、yieldを使用する必要があります。

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

これはあなたにsection.renderContents()は文字列を返す限り発電をあげる、csvモジュールは問題なく書き出すことができます。