2017-05-11 3 views
0

크롤러 실행 데이터를 가져 오는 것으로 볼 수 있지만 데이터를 CSV 파일로 인쇄 할 때 한 줄로 인쇄합니다. 나는 파이썬에서 클래스로 작업하는 것이 매우 새로울 것이므로, 코드에 여러 가지 실수가있을 수 있으므로 다른 예제를 가상으로 작성했다. 그래서이 시점에서 한 줄 인쇄를 수정하고 새로운 줄을 만들어 내려고합니다. 모든 제안은 매우 감사하겠습니다. 내가 제대로 이해 한 경우긁힌 데이터가 한 줄에 csv로 인쇄되는 경우

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) 

당신이 writer.writerow(self.storage)를 사용하는 경우 self.storage 같은 한 줄의 문자열을 고려 writerow 방법. 이 때문에 파일에 한 줄로 저장됩니다.

참고 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