在一个lin中将刮取的数据打印到csv

2024-04-25 14:16:40 发布

您现在位置:Python中文网/ 问答频道 /正文

运行我的爬虫,我可以看到它获取数据,因为它应该,但当谈到打印数据到一个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)

Tags: csvimportselfurlgettitledeflink
1条回答
网友
1楼 · 发布于 2024-04-25 14:16:40

如果我理解正确,那么代码中已经有了答案,您可以逐行打印出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)时,方法writerowself.storage视为一行字符串。这就是为什么它将其存储为文件中的一行

注意,我使用python3运行代码

相关问题 更多 >