Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3删除带有额外字符rstrip的重复Web链接_Python_Python 3.x_Web Scraping - Fatal编程技术网

Python3删除带有额外字符rstrip的重复Web链接

Python3删除带有额外字符rstrip的重复Web链接,python,python-3.x,web-scraping,Python,Python 3.x,Web Scraping,使用Python3。我正在尝试从一个网站中提取所有独特的链接,除了少数在末尾有/的链接外,代码似乎正常工作 例如:我的程序将包括& 我想确保我的程序删除最后一个字符,以确保不会返回重复的字符。我已经研究了rstrip(),但似乎无法让它工作。这是我的代码: import bs4 as bs import urllib.request import urllib.parse source = urllib.request.urlopen('https://www.census.gov/data

使用Python3。我正在尝试从一个网站中提取所有独特的链接,除了少数在末尾有/的链接外,代码似乎正常工作 例如:我的程序将包括& 我想确保我的程序删除最后一个字符,以确保不会返回重复的字符。我已经研究了
rstrip()
,但似乎无法让它工作。这是我的代码:

import bs4 as bs
import urllib.request
import urllib.parse


source = urllib.request.urlopen('https://www.census.gov/data/tables/2016/demo/popest/state-total.html').read()
soup = bs.BeautifulSoup(source,'lxml')

filename = "UniqueWebLinks.csv"
f = open(filename, "w")
headers = "WebLinks\n"
f.write(headers)

all_links = soup.find_all('a')

url_set = set()

for link in all_links:
    web_links = link.get("href")
    ab_url = urllib.parse.urljoin('https://www.census.gov/data/tables/2016/demo/popest/state-total.html', web_links)
    print (ab_url)
    if ab_url and ab_url not in url_set:
        f.write(str(ab_url) + "\n")
        url_set.add(ab_url)

我会保持简单,并且非常明确地说明如何清理URL。例如,如果最后一个字符是斜杠(
/
)或散列(
#
)(如果URL以散列结尾,则与未以散列结尾的URL相同),则去掉最后一个字符。浏览完数据后,我还会删除所有空白URL,因为这可能不是您要查找的内容

BASE_URL = 'https://www.census.gov/data/tables/2016/demo/popest/state-total.html'

all_links = soup.find_all('a')

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_url = urllib.parse.urljoin(base_url, link)
        cleaned_links.add(full_url)
    return cleaned_links

cleaned_links = clean_links(all_links, BASE_URL)

for link in cleaned_links:
    f.write(str(link) + '\n')

这不是对你问题的回答,但census.gov有一系列的API可以从中获取数据,而无需删除网站上的任何内容。也许API中没有您要查找的内容,但我肯定要先看看: