在 python BeautifulSoup 上获取带有特定前缀的超链接
Posted
技术标签:
【中文标题】在 python BeautifulSoup 上获取带有特定前缀的超链接【英文标题】:getting hyperlinks with a certain prefix on python BeautifulSoup 【发布时间】:2021-09-26 05:43:59 【问题描述】:我试图创建一个函数来从一个链接到另一个***页面。链接到所有其他 wiki 文章都以前缀“/wiki/”开头。我尝试了一个代码来获取一个随机链接,但我的代码正在获取所有课程。之后在网上看到如下代码。
allLinks = soup.find(id="bodyContent").find_all("a")
random.shuffle(allLinks)
linkToScrape = 0
for link in allLinks:
# We are only interested in other wiki articles
if link['href'].find("/wiki/") == -1:
continue
# Use this link to scrape
linkToScrape = link
break
此代码块似乎运行良好。但是,我无法理解一部分。
if link['href'].find("/wiki/") == -1:
我无法理解 -1 的用法。此外,有人可以解释这行代码中的条件是如何工作的,以及这里如何使用find
函数吗?
作为背景,这里是我找到代码的页面:“https://www.freecodecamp.org/news/scraping-wikipedia-articles-with-python/”
【问题讨论】:
您想要所有其他/wiki/
链接还是非wiki
链接?
所有维基链接。
您希望我们做什么?我没有正确理解您的问题!
【参考方案1】:
如果在字符串s
中找不到子字符串sub
,s.find(sub)
返回-1
。所以在这种情况下,它是说“如果我们在链接字符串中找不到 /wiki/ 然后继续,因为它不是***链接”。
它之所以像-1
这样奇怪的数字是因为find
返回找到子字符串的索引,该索引可以是任何正数或0
。所以-1
用于表示在任何索引处都找不到。
https://docs.python.org/3/library/stdtypes.html#str.find
虽然在这种情况下,startswith
似乎更合适:
if not link['href'].starts("/wiki/"):
continue
https://docs.python.org/3/library/stdtypes.html#str.startswith
【讨论】:
links = [i['href'] for i in soup.select("#bodyContent [href^='/wiki/']")]
- 更好的是,只从一开始就收集符合条件的链接,然后去掉所有不必要的代码。
是的@QHarr,这将是一个更好的整体解决方案,我意识到他们的问题有两个方面:1.我如何找到这些链接? 2. 本例中的这一行是做什么的?以上是关于在 python BeautifulSoup 上获取带有特定前缀的超链接的主要内容,如果未能解决你的问题,请参考以下文章