0
運行我的抓取程序我可以看到它應該按照它應該抓取的數據,但是當它將數據打印到csv文件時,它會將其打印在一行中。我很興奮能夠在python中使用類,所以我的代碼中可能會出現很多錯誤,這些代碼我假設已經看到了不同的例子。所以,在這一點上,我希望解決單行打印問題,並使其不斷創建新行。任何建議將不勝感激。刮掉的數據打印到單行的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)
謝謝Nurzhan,爲了這樣一個美妙的解決方案。它工作完美。有一段時間會接受你的回答。還有一件事要知道:如果我想使用get_link方法中的「name」和「urls」替換「self.storage」而不是使用「dunder str」方法,應該使用self.name和self.urls調用它嗎? – SIM
@ SMth80,如果你想在'__str__'方法中使用'self.name'和'self.urls'訪問變量'name'和'urls',那麼你需要在構造方法中聲明它們爲實例變量你的'智能類'的'__init__'。例如,'self.name =「」'和'self.urls =「」'。但是,既然你處理了一個名稱和url對的集合,那麼你現在的解決方案是好的。你把你的名字和url(它們是元組)放到'storage'列表中,然後從那裏訪問它們。希望我回答你的問題。 – Nurjan
謝謝萬億。用幾行的答案挽救了我多年的努力。 – SIM