2016-07-24 53 views
0

我想使用Python刮下面的網站,需要刮掉數據導出到一個CSV文件:如何用python抓取多頁網站並將數據導出爲.csv文件?

http://www.swisswine.ch/en/producer?search=&&

本網站包括154頁相關搜索。我需要打電話給每一頁,並且想要抓取數據,但我的腳本不能連續調用下一頁。它只刮一頁數據。

在這裏,我分配值我< 153因此,這個腳本只運行第154頁,並給了我10個數據。我需要從第1到第154頁的數據

如何通過一次運行腳本以及如何將數據導出爲CSV文件來從所有頁面中刪除整個數據?

我的腳本如下

import csv 
import requests 
from bs4 import BeautifulSoup 
i = 0 
while i < 153:  
    url = ("http://www.swisswine.ch/en/producer?search=&&&page=" + str(i)) 
    r = requests.get(url) 
    i=+1 
    r.content 

soup = BeautifulSoup(r.content) 
print (soup.prettify()) 


g_data = soup.find_all("ul", {"class": "contact-information"}) 
for item in g_data: 
     print(item.text) 
+0

該刮數據線。否則,您完成循環並獲取循環後最後一個數據。 – chapelo

+0

@vishnu使用BeautifulSoup很好。但是,如果你正在尋找整體管理,你應該去http://doc.scrapy.org/en/latest/intro/tutorial.html –

回答

1

你應該把你的HTML解析代碼循環下也是如此。而你沒有正確遞增i變量(感謝@MattDMo):

import csv 
import requests 
from bs4 import BeautifulSoup 

i = 0 
while i < 153:  
    url = ("http://www.swisswine.ch/en/producer?search=&&&page=" + str(i)) 
    r = requests.get(url) 
    i += 1 

    soup = BeautifulSoup(r.content) 
    print (soup.prettify()) 

    g_data = soup.find_all("ul", {"class": "contact-information"}) 
    for item in g_data: 
      print(item.text) 

我也會改善以下:

  • 使用requests.Session()保持網絡的刮會議,這也將帶來性能提升:

    如果您向同一主機發出多個請求,則會重新使用基礎TCP連接,這可能會導致顯着的性能增加rease

  • 是明確的關於底層解析器BeautifulSoup:從湯= ....下來,應該是在循環內:

    soup = BeautifulSoup(r.content, "html.parser") # or "lxml", or "html5lib" 
    
+0

你錯過了一個小細節 - 在while循環中,'' i'增加爲'i = + 1'。它應該是'i + = 1'。 – MattDMo

+0

@MattDMo啊,我覺得有點不對勁,但缺乏早晨的咖啡。接得好!謝謝。 – alecxe

相關問題