使用Python将多个URL中的不同变量刮擦到一个CSV文件中

时间:2018-02-20 15:02:54

标签: python csv url beautifulsoup screen-scraping

我正在尝试将多个网址中的数据划分到一个单独的csv文件中,这让我发疯;)

我知道这可能是一个常见的问题,而且我不是第一个尝试这样做的人,但不知何故我无法将其他人的解决方案应用于我的代码,因为他们并非真的“汤。找到“ - 像我一样一个接一个的多个变量。我的做法可能过于基本。

所以我开始使用BeautifulSoup从单个网址抓取多个内容(让我们使用名称作业 worksfor )并将其导出进入一个csv文件,它工作正常:

with open('urls.csv') as inf:
    urls = (line.strip() for line in inf)
    for url in urls:
        site = urlopen(url)   
        soup = BeautifulSoup(site, "lxml")
        for name in soup.find("h1", {"class": "name"}):
            print(name)

然后我正在查找如何打开保存在文件(urls.csv)中的多个URL并抓取(此处:打印),例如名称。这里有三个名字。

with open('urls.csv') as inf:
    urls = (line.strip() for line in inf)
    for url in urls:
        site = urlopen(url)   
        soup = BeautifulSoup(site, "lxml")
        for name in soup.find("h1", {"class": "name"}):         
            with open('output.csv', 'w') as csvfile:
                spamwriter = csv.writer(csvfile, delimiter=';', quoting=csv.QUOTE_MINIMAL)
                spamwriter.writerow([name, job, worksfor])

这也可以正常工作,但是我很难将这两种方法结合到代码中,这些代码可以为我的urls.csv中的每个URL提供一行(name; age; worksfor)的csv文件

非常感谢您的任何建议

@SuperStew:对,所以其中一种至少没有产生任何错误的方法如下:

#pragma warning disable 1591

//Your code that generates warning CS1591 here

#pragma warning restore 1591

这总是最终只有CSV,其中只包含我列表中最后一个URL的那些变量,可能会覆盖所有其他变量。

1 个答案:

答案 0 :(得分:1)

正确,所以这看起来很好,除了你把结果写到csv的最后一部分。你基本上为每个url重写了csv,这意味着你的代码完成后只剩下最后一个。为避免这种情况,您可以在append模式下打开csv文件,而不是write。只是一个小小的改变

with open('output.csv', 'a') as csvfile: