2016-10-11 12 views
-1

ウェブサイトからデータを取り出すシンプルなコードを書いたが、すべての行をCSVファイルに保存するのに苦労している。完成したスクリプトは1行だけを保存します。これはループで最後に発生したものです。重要csvファイルへのパイピングデータのPython書込み

def get_single_item_data(item_url): 
    f= csv.writer(open("scrpe.csv", "wb")) 
    f.writerow(["Title", "Company", "Price_netto"]) 

    source_code = requests.get(item_url) 
    soup = BeautifulSoup(source_code.content, "html.parser") 

for item_name in soup.find_all('div', attrs={"id" :'main-container'}): 
    title = item_name.find('h1').text 
    prodDesc_class = item_name.find('div', class_='productDesc') 
    company = prodDesc_class.find('p').text 
    company = company.strip() 

    price_netto = item_name.find('div', class_="netto").text 
    price_netto = price_netto.strip() 


    #print title, company, ,price_netto 

    f.writerow([title.encode("utf-8"), company, price_netto, ]) 

これは私のスクリプト全体で同時列に

+0

あなたのインデントを修正しましたが、あなたが予想していたもの、つまり一つのアイテムを正確に書くためには、id-main-container'が1つしかないと推測しています。 URLは何ですか? –

+0

サンプル出力を投稿できますか?私はそれがあなたがそれを期待するときに改行ではないと思っています。 – Will

+0

@Will、writerowは改行を追加するので、間違いはありません。 –

答えて

0

@PadraicCunninghamデータを保存することです:

import requests 
from bs4 import BeautifulSoup 
import csv 

url_klocki = "http://selgros24.pl/Dla-dzieci/Zabawki/Klocki-pc1121.html" 
r = requests.get(url_klocki) 
soup = BeautifulSoup(r.content, "html.parser") 

def main_spider(max_page): 
    page = 1 
    while page <= max_page: 
     url = "http://selgros24.pl/Dla-dzieci/Zabawki/Klocki-pc1121.html" 
     source_code = requests.get(url) 
     soup = BeautifulSoup(source_code.content, "html.parser") 

     for link in soup.find_all('article', class_='small-product'): 
      url = "http://www.selgros24.pl" 
      a = link.findAll('a')[0].get('href') 
      href = url + a 
      #print href 

      get_single_item_data(href) 

     page +=1 

def get_single_item_data(item_url): 
    f= csv.writer(open("scrpe.csv", "wb")) 
    f.writerow(["Title", "Comapny", "Price_netto"]) 

    source_code = requests.get(item_url) 
    soup = BeautifulSoup(source_code.content, "html.parser") 

    for item_name in soup.find_all('div', attrs={"id" :'main-container'}): 
     title = item_name.find('h1').text 
     prodDesc_class = item_name.find('div', class_='productDesc') 
     company = prodDesc_class.find('p').text 
     company = company.strip() 

     price_netto = item_name.find('div', class_="netto").text 
     price_netto = price_netto.strip() 


     print title, company, price_netto 

     f.writerow([title.encode("utf-8"), company, price_netto]) 


main_spider(1) 
0

問題は、あなたがget_single_item_dataで出力ファイルを開いているということであり、それはありますその関数が返ってくると閉じて、fが範囲外になります。 開いているファイルをget_single_item_dataに渡したいので、複数の行が書き込まれます。

関連する問題