尝试在Python中将集合的结果写入csv文件,但只打印一行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试在Python中将集合的结果写入csv文件,但只打印一行相关的知识,希望对你有一定的参考价值。
坚持一些东西,并希望得到一些关于我在这里做错的想法。我已经写了一个网络抓取程序,它从census.gov网站上删除了所有的网页链接,但是当我尝试将结果写入csv文件时,我只得到一个写出来的链接而不是完整列表。见下面的代码。为了确保我的设置正确拉动,我添加了一行代码,首先打印了我的集合的结果,然后在csv中写出结果。初步结果看起来是正确的,因为我看到了一个完整的链接列表。但是,我不知道为什么我只能写出一行数据来excel csv:
import requests
from bs4 import BeautifulSoup, SoupStrainer
import bs4, csv
search_link = "https://www.census.gov/programs-surveys/popest.html"
search = requests.get(search_link).text
raw_html = search
soup = BeautifulSoup(raw_html, 'html.parser')
import re
links = soup.find_all('a', {'class': re.compile('uscb*')})
urls_set = set()
for link in links:
my_links = link.get("href")
if my_links not in urls_set:
urls_set.add(my_links)
print(my_links)
with open("Current Estimate Result.csv",'wb') as f:
cw = csv.writer(f)
cw.writerows(my_links)
print(my_links)
f.close()
问题是my_links
变量保存最后一个读取URL。所以cw.writerows(my_links)
只写出了那个URL,而不是所有的URL - 实际存储在urls_set
中。
但是,我不确定你使用writerows()
方法是完全正确的。 This method expects an iterator of row objects(通常是列表清单)。每个嵌套列表代表CSV文件中的一行。
因此,最好将URL保存在列表而不是集合中,然后在添加之前将每个URL包装在其自己的列表(行)中。例如:
urls_list = []
for link in links:
my_link = [link.get("href")] # A row in the csv
if my_link not in urls_list:
urls_list.append(my_link)
...
cw.writerows(urls_list) # Pass the overall list
注意我在上面的例子中将my_links
重命名为my_link
。使用列表还可以确保保留订单。
以上是关于尝试在Python中将集合的结果写入csv文件,但只打印一行的主要内容,如果未能解决你的问题,请参考以下文章
在 PySpark 中将数据帧写入 CSV 后重命名文件 [重复]
在python中调用mysql存储过程并将结果写入csv文件
如何通过在 Python 中将两个列表合并为一个,使用 CSV 模块或 Pandas 写入 csv 或 Excel 文件?