我一直在想我到底做错了什么。我已经写了一个网页抓取程序,从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包装在自己的列表(行)中。例如:
注意:在上面的示例中,我将
my_links
重命名为my_link
。使用列表还可以确保保留顺序相关问题 更多 >
编程相关推荐