将扫描的数据打印到单行中的csv

时间:2017-05-11 07:47:55

标签: 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.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 个答案:

答案 0 :(得分: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)时,方法writerow会将self.storage视为一个字符串。这就是为什么它将它作为一行存储在文件中。

注意我使用python3运行代码。