如何使用Python抓取Wikipedia文章

如何使用Python抓取Wikipedia文章

在本文中,我将使用Python创建一个网络抓取工具,该工具将抓取Wikipedia页面。

抓取工具将转到Wikipedia页面,抓取标题,然后随机链接到下一个Wikipedia页面。

我认为看到此刮板将访问哪些随机维基百科页面会很有趣!

设置刮板

首先,我将创建一个名为的新python文件scraper.py

touch scraper.py

为了发出HTTP请求,我将使用该requests库。您可以使用以下命令进行安装:

pip install requests

让我们以网络抓取维基页面为起点:

import requests

response = requests.get(
	url="https://en.wikipedia.org/wiki/Web_scraping",
)
print(response.status_code)

运行刮板时,它应显示200状态代码:

python3 scraper.py
200

好吧,到目前为止一切顺利!🙌

从页面提取数据

让我们从HTML页面中提取标题。为了让我的生活更轻松,我将为此使用BeautifulSoup软件包。

pip install beautifulsoup4

检查Wikipedia页面时,我看到title标签具有#firstHeadingID。

image

美丽的汤让您可以通过ID标签查找元素。

title = soup.find(id="firstHeading")

现在将程序整合在一起如下所示:

import requests
from bs4 import BeautifulSoup

response = requests.get(
	url="https://en.wikipedia.org/wiki/Web_scraping",
)
soup = BeautifulSoup(response.content, 'html.parser')

title = soup.find(id="firstHeading")
print(title.string)

运行时,它显示Wiki文章的标题:🚀

python3 scraper.py
Web scraping

刮其他链接

现在,我将深入研究Wikipedia。我将获取<a>另一个Wikipedia文章的随机标签,然后刮取该页面。

为此,我将使用漂亮的汤来查找<a>Wiki文章中的所有标签。然后我将列表随机排列以使其随机。

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)

如您所见,我使用soup.find(id="bodyContent").find_all("a")来查找<a>主要文章中的所有标签。

由于我只对指向其他Wikipedia文章的链接感兴趣,因此请确保该链接包含/wiki前缀。

现在运行该程序时,它会显示指向另一篇维基百科文章的链接,太好了!

python3 scraper.py
<a href="/wiki/Link_farm" title="Link farm">Link farm</a>

创造无尽的刮板

好吧,让我们使刮板真正刮掉新的链接。

为此,我将所有内容移至一个scrapeWikiArticle函数中。

import requests
from bs4 import BeautifulSoup
import random

def scrapeWikiArticle(url):
	response = requests.get(
		url=url,
	)

	soup = BeautifulSoup(response.content, 'html.parser')

	title = soup.find(id="firstHeading")
	print(title.text)

	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

	scrapeWikiArticle("https://en.wikipedia.org" + linkToScrape['href'])

scrapeWikiArticle("https://en.wikipedia.org/wiki/Web_scraping")

scrapeWikiArticle函数将获取Wiki文章,提取标题并找到随机链接。

然后,它将scrapeWikiArticle使用此新链接再次调用。因此,它会在Wikipedia上创建一个不断循环的Scraper循环。

让我们运行程序,看看会得到什么:

pythron3 scraper.py
Web scraping
Digital object identifier
ISO 8178
STEP-NC
ISO/IEC 2022
EBCDIC 277
Code page 867
Code page 1021
EBCDIC 423
Code page 950
G
R
Mole (unit)
Gram
Remmius Palaemon
Encyclopædia Britannica Eleventh Edition
Geography
Gender studies
Feminism in Brazil

太棒了,从大约10个步骤中,我们从“网页搜刮”到“巴西女权主义”。惊人!

结论

我们已经在Python中构建了一个网络抓取工具,可以抓取随机的Wikipedia页面。通过跟随随机链接,它在Wikipedia上不断反弹。

这是一个有趣的花招,而Wikipedia在进行网页抓取时非常宽容。

还有更难抓刮的网站,例如亚马逊或谷歌。如果您想抓取这样的网站,则应使用无头的Chrome浏览器和代理服务器设置系统。或者,您可以像这样使用可以为您处理所有事务的服务。

但是请注意不要滥用网站,而只能刮擦允许刮擦的数据。

祝您编码愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源代码杀手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值