【发布时间】:2021-02-09 18:20:12
【问题描述】:
我正在尝试仅从网站上抓取唯一的 url,并将它们作为绝对链接写入文件。 当我最初抓取网站时,我检索到 253 个链接。但是,当我使用 set() 仅检索唯一链接并使用代码将它们转换为绝对链接时,它只返回 1 个 url。我玩弄了它并删除了可能导致它的函数 unique_urls ,但它做了同样的事情。我是 Python 新手,仍然掌握循环,所以它很容易成为我忽略的东西。有任何想法吗?谢谢。
import bs4
import requests
from bs4 import BeautifulSoup, SoupStrainer
import csv
url = "https://www.census.gov/programs-surveys/popest.html"
r = requests.get(url)
raw_html = r.text
soup = BeautifulSoup(raw_html, 'html.parser')
results = soup.find_all("a")
print ('Number of links retrieved: ', len (results))
def unique_urls(tags,url):
cleaned_urls = str(link.get("href"))
for link in results:
link = link.get("href")
if link.startswith('/'):
cleaned_urls.add('https://www.census.gov' + hrefs)
elif link.startswith('#'):
cleaned_urls.add(hrefs)
else:
unique_urls.add(cleaned_urls)
print ('Number of links retrieved: ', len )
【问题讨论】:
-
在添加
set()之前你有253个链接,之后它只返回1个,当你删除set()回到你第一次拥有的时候,仍然只有1个结果?我理解正确吗?你能提供一个minimal reproducible example吗? -
不,抱歉。当我删除 unique_urls 函数时。我认识的人建议我尝试不使用该功能,但我仍然使用 set 方法。不确定这是否有意义。当我回到家时,我可以发布一个例子。谢谢。
-
我不理解
unique_urls()函数,它有两个未使用的参数,但确实使用了一个似乎没有在任何地方定义的变量。这里的函数似乎都没有返回任何东西,最好重构代码以获取和返回值,而不是弄乱全局变量。 -
另外,你如何定义你感兴趣的链接?
标签: python web-scraping