网页链接抓取

达西德

我正在从事一个项目,该项目要求我从网站上抓取唯一链接并将它们保存到 CSV 文件中。我已经阅读了很多关于如何做到这一点的材料,我看过视频,在 Pluralsight 和 LinkedIn Learning 上接受过培训,我大部分时间都发现这种情况,我不确定作业的一个方面怎么做。

该程序应该从给定的域(见下面的代码)和域外的任何 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 内部的所有网络链接,因此存在于该网站中但不会抓取该网站外部的任何该点。我知道答案必须很简单,但是在这个项目上工作了一段时间后,我看不出它有什么问题,所以请帮助我。

哈尔

您可以在集合推导式中尝试如下选择器。这将查找or开头的a标签元素这是您可以定制的起点。您需要更多的逻辑,因为至少有一个 url本身就是这样。hrefhttp//

links = {item['href'] for item in soup.select('a[href^=http], a[href^="/"]')}

另外,检查所有预期的 url 是否存在于汤中,因为我怀疑有些需要 javascript 才能在页面上运行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章