2016-12-10 4 views
0

私は切り取ったデータをcsvファイルに転送しようとしています。csvに削り取ったデータを書き込む

import requests, bs4, csv, sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 
url = 'http://www.constructeursdefrance.com/resultat/?dpt=01' 

res = requests.get(url) 
res.raise_for_status() 
soup = bs4.BeautifulSoup(res.text,'html.parser') 
links = [] 

for div in soup.select('.link'): 
    link = div.a.get('href') 
    links.append(link) 
for i in links: 
    url2 = i 
    res2 = requests.get(url2) 
    soup2 = bs4.BeautifulSoup(res2.text, 'html.parser') 
    for each in soup2.select('li > strong'): 
     data = each.text, each.next_sibling 
    with open('french.csv', 'wb') as file: 
     writer = csv.writer(file) 
     writer.writerows(data) 

出力は言う:ここに私のコードです

Traceback (most recent call last): 
File "test_new_project.py", line 23, in <module> 
writer.writerows(data) 
csv.Error: sequence expected 

しかし、私はcsvファイルにタプルを入れしようとしています、そして限り私が知っているようにCSVファイルをタプルとリストを受け付けます。この問題を解決するにはどうすればよいですか?この

for each in soup2.select('li > strong'): 
     data = each.text, each.next_sibling 

答えて

0

Atiragが正しい(インデントを気)ですが、あなたは、出力ファイルを開くための呼び出しでは、forループ内にネストされていることである別の問題があります。したがって、複数のリンクがある場合、ファイルは毎回上書きされ、出力は期待どおりになりません。私は、これはあなたが意図した出力を生成するべきだと思う:

for div in soup.select('.link'): 
    link = div.a.get('href') 
    links.append(link) 

with open("french.csv", "w") as file: 
    writer = csv.writer(file) 
    for i in links: 
     res2 = requests.get(i) 
     soup2 = bs4.BeautifulSoup(res2.text, 'html.parser') 
     for each in soup2.select('li > strong'): 
      writer.writerow([each.text, each.next_sibling]) 
+0

はいそれは働いた!それがこのようにできることを知りませんでした。最後の行で[each.text、each.next_sibling]がどのように機能するのか説明できますか? – Heavysteps

0

変更は、この

data=[] 
for each in soup2.select('li > strong'): 
     data.append((each.text, each.next_sibling)) 

にデータ変数が1組でないタプルのリストでした。上記のコードは、タプルのリストを作成します。

他のソリューションは、これが

data = [] 
for i in links: 
    url2 = i 
    res2 = requests.get(url2) 
    soup2 = bs4.BeautifulSoup(res2.text, 'html.parser') 
    for each in soup2.select('li > strong'): 
     data.append((each.text, each.next_sibling)) 
with open('french.csv', 'wb') as file: 
    writer = csv.writer(file) 
    writer.writerows(data) 
+1

彼はまだ彼の出力ファイルの問題は、毎回彼の私のために上書きされたリンクのループを反復処理に –

+0

これは偉大な男だが、何とか私の出力CSVのみを取得しますスクラップした情報の最後の部分。他のデータはどうなりましたか?私は何がコードに間違っていたのか分からない。 – Heavysteps

+0

@PeterLinうん、私は問題を参照してください。 Kevinのソリューションはうまくいくはずです。 – Atirag

関連する問題