2016-10-01 11 views
2

すべてのデータ(つまりすべてのページ)を単一のcsvファイルに保存しようとしていますが、このコードは最終ページのデータのみを保存します.Egここで[]には2つのURLが含まれています。最後のCSVには2番目のURLデータのみが含まれます。 私は明らかにloop.butで何か間違っています私は何を知っている。 また、このページには100個のデータポイントが含まれています。しかし、このコードでは最初の44行しか書き込まれません。 .............PythonのwebscrapingとCSVへのデータ書き込み

from bs4 import BeautifulSoup 
import requests 
import csv 
url = ["http://sfbay.craigslist.org/search/sfc/npo","http://sfbay.craigslist.org/search/sfc/npo?s=100"] 
for ur in url: 
    r = requests.get(ur) 
    soup = BeautifulSoup(r.content) 
    g_data = soup.find_all("a", {"class": "hdrlnk"}) 
    gen_list=[] 
    for row in g_data: 
     try: 
      name = row.text 
     except: 
      name='' 
     try: 
      link = "http://sfbay.craigslist.org"+row.get("href") 
     except: 
      link='' 
     gen=[name,link] 
     gen_list.append(gen) 

with open ('filename2.csv','wb') as file: 
    writer=csv.writer(file) 
    for row in gen_list: 
     writer.writerow(row) 

答えて

3

gen_listは、URLを上で動作する、あなたのループ内で再初期化されているが、この問題を助けてください。

gen_list=[] 

この行をforループの外に移動します。

... 
url = ["http://sfbay.craigslist.org/search/sfc/npo","http://sfbay.craigslist.org/search/sfc/npo?s=100"] 
gen_list=[] 
for ur in url: 
... 
+0

はそんなにありがとう..... – Arunkumar

0

私は後で、したいが、この方法を試してみてくださいあなたのポストを見つけました:

import requests 
from bs4 import BeautifulSoup 
import csv 

final_data = [] 
url = "https://sfbay.craigslist.org/search/sss" 
r = requests.get(url) 
data = r.text 

soup = BeautifulSoup(data, "html.parser") 
get_details = soup.find_all(class_="result-row") 

for details in get_details: 
    getclass = details.find_all(class_="hdrlnk") 
    for link in getclass: 
     link1 = link.get("href") 
     sublist = [] 
     sublist.append(link1) 
     final_data.append(sublist) 
print(final_data) 

filename = "sfbay.csv" 
with open("./"+filename, "w") as csvfile: 
    csvfile = csv.writer(csvfile, delimiter = ",") 
    csvfile.writerow("") 
    for i in range(0, len(final_data)): 
     csvfile.writerow(final_data[i]) 
関連する問題