我正在从事一个项目,该项目需要我从网站上抓取唯一链接并将其保存到CSV文件。我已经阅读了很多有关如何执行此操作的材料,我已经观看了视频,进行了有关Pluralsight和LinkedIn学习的培训,并且大多数情况下,我发现这种情况存在着我不确定的方面怎么做。
该程序应该从给定的Domain(请参见下面的代码)和该域之外的任何Web链接中抓取Web链接。
import bs4 as bs
from bs4 import BeautifulSoup
import urllib.request
import urllib.parse
BASE_url = urllib.request.urlopen("https://www.census.gov/programs-surveys/popest.html").read()
soup = bs.BeautifulSoup(BASE_url, "html.parser")
filename = "C996JamieCooperTask1.csv"
file = open(filename, "w")
headers = "WebLinks as of 4/7/2019\n"
file.write(headers)
all_Weblinks = soup.find_all('a')
url_set = set()
def clean_links(tags, base_url):
cleaned_links = set()
for tag in tags:
link = tag.get('href')
if link is None:
continue
if link.endswith('/') or link.endswith('#'):
link = link[-1]
full_urls = urllib.parse.urljoin(base_url, link)
cleaned_links.add(full_urls)
return cleaned_links
baseURL = "https://www.census.gov/programs-surveys/popest.html"
cleaned_links = clean_links(all_Weblinks, baseURL)
for link in cleaned_links:
file.write(str(link) + '\n')
print ("URI's written to .CSV File")
该代码适用于baseURL内部的所有Web链接,因此该URL存在于该网站中,但不会抓住该网站外部的任何链接。我知道答案一定很简单,但是在完成这个项目一段时间后,我只是看不出问题出在哪里,所以请帮助我。
答案 0 :(得分:0)
您可以在集合理解中尝试如下选择器。这会寻找以a
或href
开头的http
的{{1}}标签元素。这是您可以定制的起点。您将需要更多逻辑,因为至少有一个URL本身就是/
。
/
另外,请检查汤中是否存在所有预期的URL,因为我怀疑其中一些需要javascript才能在页面上运行。