【发布时间】:2021-02-06 01:23:53
【问题描述】:
我是一个认真的新手。我有一个项目,遇到了麻烦。我要创建一个程序来:
1.) 从网站上抓取网页链接, 2.) 删除重复项, 3.) 确保所有网页链接都是 URI 格式,并且 4.) 写入 csv。
我在第 3 步遇到了麻烦。我在下面分享的第一段代码是我无数次失败的尝试之一。问题似乎在于我无法将我的集合转换回列表并且集合不是可变的,或者......我认为我在 Jupyter 中所做的一些事情导致它失去了与程序的连接并且它无法识别我引用我抓取的链接的方式。请告诉我我在哪里搞砸了。
尝试失败:
save link as BeautifulSoup object
soup= BeautifulSoup
r= urllib.request.urlopen('https://www.census.gov/programs-surveys/popest.html').read()
soup = BeautifulSoup(r,"html.parser")
links=set([a['href'] for a in soup.find_all('a',href=True)])
print(set)
print(links)
f=open('JessicasExport.csv','w', newline='')
writer=csv.writer(f,delimiter=',', lineterminator= '\r')
set=MyList
MyList=[set]
ctr=0
for x in MyList:
MyList.update([x])
if not MyList:
''
elif hrefs.startswith(['#']):
MyList.add(hrefs[1:])
elif hrefs.startswith(['/']):
MyList.add (['https://www.census.gov'+ hrefs])
elif hrefs.endswith(['.gov']):
MyList.add ([hrefs + '/'])
else:
MyList.add([hrefs])
writer.writerow([MyList])
del MyList[:]
ctr += 1
print('Number of urls written to CSV:' , ctr)
f.close()
输出 []:#RESULTING 错误
AttributeError Traceback (most recent call last)
<ipython-input-5-35e0479f6c2e> in <module>
5 ctr=0
6 for x in MyList:
----> 7 MyList.update([x]) 8 如果不是 MyList: 9''
AttributeError: 'list' object has no attribute 'update'
然后我对其进行了调整并尝试了这个。下面的这段代码成功地吐出了我抓取的链接,但没有向 csv 写入任何内容,也没有更正不在 URI 中的部分代码。但是.....它没有产生错误代码,所以我很困惑......非常感谢任何帮助!几天前,我一直在等待老师的回复,并渴望取得进展。
部分成功尝试,没有错误但没有文件并且没有附加到 uri
import csv
import requests
from bs4 import BeautifulSoup
import urllib.request
import os
soup= BeautifulSoup
r= urllib.request.urlopen('https://www.census.gov/programs-surveys/popest.html').read()
soup = BeautifulSoup(r,"html.parser")
links=set([a['href'] for a in soup.find_all('a',href=True)])
print(set)
print(links)
f=open('check.csv', 'w', newline='')
writer = csv.writer(f, delimiter=',', lineterminator='\r')
Myset = set()
MyList= [Myset]
ctr=0
for x in Myset:
MyList.append ([x])
if not MyList:
''
elif hrefs.startswith(['#']):
MyList.add(hrefs[1:])
elif hrefs.startswith(['/']):
MyList.add (['https://www.census.gov'+ hrefs])
elif hrefs.endswith(['.gov']):
MyList.add ([hrefs + '/'])
else:
MyList.add([hrefs])
writer.writerow([MyList])
del MyList[:]
ctr += 1
f.close()
感谢所有审阅并提出建议的人!我真的很想明白。
【问题讨论】:
-
你到底想用
Myset = set()做什么?您基本上已将Myset声明为一个新的(因此是空的)集合,然后尝试迭代它。由于Myset中没有任何内容,因此您的 for 循环基本上什么都不做。您的链接存储在变量links。 -
非常感谢您抽出宝贵时间审阅并向我提供反馈!这很有意义。我尝试了 myset=(links) 但出现名称错误。好像它无法识别链接。感谢您花时间指出我的错误!我参加了一个为期 6 周的课程,只是作为介绍,没有背景,我显然需要从更基本的东西开始。
-
你在哪里有
NameError?因为它应该已经工作了myset = links(你放的那些括号什么都不做),因为links已经被定义了。但是,您为什么要将变量myset分配给link而不做任何更改?
标签: python csv web-scraping beautifulsoup