2017-05-11 10 views
0

クローラを実行するデータを取得するのがわかりましたが、データをcsvファイルに出力する際に​​、1行に出力します。私は非常にPythonのクラスで作業するので、私は仮定的に別の例を見て書いた私のコードに多くの間違いがあるかもしれません。ですから、この時点では、単一行の印刷を修正し、新しい行を作成するようにしたいと考えています。どんな提案も高く評価されます。私が正しくあなたを理解している場合はスクラップされたデータがcsvに1行で出力される

import csv 
import requests 
from lxml import html 

class wiseowl: 
    def __init__(self,start_url): 
     self.start_url=start_url 
     self.storage=[] 

    def crawl(self): 
     self.get_link(self.start_url) 


    def get_link(self,link): 
     response=requests.get(link) 
     tree=html.fromstring(response.text) 
     titles=tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']") 
     for title in titles: 
      name=title.xpath(".//a/text()")[0] 
      urls=title.xpath(".//a/@href")[0] 
      Docs=(name,urls) 
      self.storage.append(Docs) 


    def writing_csv(self): 
     with open("Wiseowl.csv","w",newline="") as f: 
      writer=csv.writer(f) 
      writer.writerow(["Title","Link"]) 
      writer.writerow(self.storage) 


    def __str__(self): 
     return "{}".format(self.storage) 


crawler=wiseowl("http://www.wiseowl.co.uk/videos/") 
crawler.crawl() 
crawler.writing_csv() 
for item in crawler.storage: 
    print(item) 

答えて

1

あなたはすでにあなたがラインでcrawler.storageラインをプリントアウトし、あなたのコード内の答えを持っています。

ただ、これに方法writing_csvを変更:

def writing_csv(self): 
    with open("Wiseowl.csv","w",newline="") as f: 
     writer=csv.writer(f) 
     writer.writerow(["Title","Link"]) 

     for item in self.storage: 
      writer.writerow(item) 

あなたは1行の文字列としてself.storageを考慮しwriterowwriter.writerow(self.storage)メソッドを使用する場合。これは、ファイル内に1行として保存する理由です。

注python3を使用してコードを実行します。

+0

ありがとうNurzhan、そのような素晴らしいソリューションです。完璧に動作します。しばらくあなたの答えを受け入れるつもりです。もう一つ知っておくべきことは:self.nameとself.urlsを使ってget_linkメソッドから "dunstr"メソッドに "self.storage"を使用する代わりに "name"と "urls"を使用したいのですか? – SIM

+1

@ SMth80、 '__str__'メソッドで' self.name'と 'self.urls'を使って変数' name'と 'urls'にアクセスしたい場合は、それらをコンストラクタメソッドでインスタンス変数として宣言する必要がありますあなたの 'wiseowlクラス'の '__init__'。たとえば、 'self.name =" "'と 'self.urls =" "'とします。しかし、名前とURLのペアのコレクションを扱うので、あなたの現在の解決策は問題ありません。名前とURLのペア(タプル)を 'storage'リストに入れ、そこからアクセスします。私はあなたの質問に答えました。 – Nurjan

+0

ありがとうございます。あなたの答えは、私の年の労力を節約しました。 – SIM

関連する問題