我是编程新手,我已经通过freecodecamp学习了几个星期。我正在查看他们网站上的代码,我有两个问题。
为什么需要洗牌变量alllinks?
什么是 if link ['href'].find("/wiki/") == -1
真的要检查吗?
我真的很感谢你的帮助。
import requests
from bs4 import BeautifulSoup
import random
response = requests.get(
url="https://en.wikipedia.org/wiki/Web_scraping",
)
soup = BeautifulSoup(response.content, 'html.parser')
title = soup.find(id="firstHeading")
print(title.content)
# Get all the links
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
print(linkToScrape)
以下是输出:
<a href="/wiki/Eventbrite" title="Eventbrite">Eventbrite, Inc.</a>
2条答案
按热度按时间sc4hvdpw1#
最好先解释问题2并描述代码的作用。
回想一下,find()返回子字符串第一次出现的索引,如果找不到所需的子字符串,则返回-1。所以
if link ['href'].find("/wiki/") == -1
检查是否在字符串中找到子字符串“/wiki/”link ['href']
. 它执行continue
如果引用链接不包含“/wiki/”。因此,循环将继续遍历链接,直到找到包含/wiki/的链接或遍历所有链接。因此,循环结束时linktoscrape的值将是包含/wiki/的第一个链接,如果没有链接包含它,则为0。现在,对于第一个问题,为了让代码完成它所做的工作,需要进行随机洗牌,即打印一篇链接在文章中的随机wikipidia文章https://en.wikipedia.org/wiki/web_scraping. 如果没有洗牌,代码将始终打印文章中链接的第一篇wiki文章https://en.wikipedia.org/wiki/web_scraping.
注意:评论中表达的意图是只查找wiki文章,但要查找诸如https://google.com/wiki/ 也将被打印,而不是维基文章。
p1iqtdky2#
您可以阅读以下文档:
.find()
在这里:https://docs.python.org/3/library/stdtypes.html#str.find基本上,
haystack.find(needle) == -1
这是一种迂回的说法needle not in haystack
.打电话的意义
random.shuffle()
这段代码的作者显然想随机从页面中选择一个链接,而不是使用第一个或最后一个。