Python 在一行中将刮取的数据打印到csv
运行我的爬虫程序,我可以看到它获取数据,因为它应该,但当谈到打印数据到一个csv文件,它打印在一行。我对python中的类非常陌生,所以我编写的代码中可能会有很多错误,我假设看到了不同的示例。因此,在这一点上,我希望修复单行打印,并使其继续创建新的行。如有任何建议,将不胜感激Python 在一行中将刮取的数据打印到csv,python,python-3.x,csv,web-crawler,Python,Python 3.x,Csv,Web Crawler,运行我的爬虫程序,我可以看到它获取数据,因为它应该,但当谈到打印数据到一个csv文件,它打印在一行。我对python中的类非常陌生,所以我编写的代码中可能会有很多错误,我假设看到了不同的示例。因此,在这一点上,我希望修复单行打印,并使其继续创建新的行。如有任何建议,将不胜感激 import csv import requests from lxml import html class wiseowl: def __init__(self,start_url): self
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)
如果我理解正确,您的代码中已经有了答案,您可以逐行打印出
crawler.storage
只需将写入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)
时,方法writerow
将self.storage
视为一行字符串。这就是为什么它将其存储为文件中的一行
注意,我使用python3运行代码。感谢Nurzhan提供了如此出色的解决方案。它工作得很好。我会马上接受你的回答。还有一件事需要知道:如果我想从get_link方法到“dunder str”方法使用“name”和“url”,而不是使用“self.storage”,我应该使用self.name和self.url来调用它吗?@SMth80,如果要使用
\uu str\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu方法中的self.name
和self.url
访问变量name
和url
,则需要在wiseowl类的构造函数方法\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>中将它们声明为实例变量。例如,self.name=“”
和self.url=“”
。但是,由于您处理的是名称和url对的集合,因此您当前的解决方案是好的。您将名称和URL对(即元组)放入存储
列表中,然后从那里访问它们。希望我能回答你的问题。谢谢你。你几句话的回答节省了我多年的精力。