2016-12-10 68 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接受元組和列表。我該如何解決這個問題?

回答

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

更改此

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

這個

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

數據變量是一個元組不是一個元組的列表。上面的代碼創建了一個元組列表。

其他的解決方案是這樣的(介意壓痕)

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出了什麼問題,我看到了問題。凱文的解決方案應該工作得很好。 – Atirag