如何在Python中提取维基百科数据?
在本文中,我们将学习如何使用Python提取维基百科数据,这里我们使用两种方法来提取数据。
方法一:使用维基百科模块
在这种方法中,我们将使用 维基百科 用于提取数据的模块。维基百科是一个多语言在线百科全书,由志愿者编辑社区使用基于维基的编辑系统作为一个开放的协作项目创建和维护。
要安装,请在终端中运行此命令。
pip install wikipedia
维基百科数据,我们将在此处提取:-
- 摘要、标题
- 页面内容
- 获取图片来源和页面网址列表
- 不同类别
一一提取数据:
1.提取摘要和页面
Syntax: wikipedia.summary(“Enter Query”)
wikipedia.page(“Enter Query”).title
Python3
import wikipedia
wikipedia.summary("Python (programming language)")
Python3
wikipedia.page("Python (programming language)").content
Python3
wikipedia.page("Python (programming language)").images
Python3
wikipedia.page('"Hello, World!" program').url
Python3
wikipedia.page('"Hello, World!" program').categories
Python3
wikipedia.page('"Hello, World!" program').links
Python3
wikipedia.set_lang("hi")
wikipedia.summary('"Hello, World!" program')
Python3
# Import Module
from bs4 import *
import requests
# Given URL
url = "https://en.wikipedia.org/wiki/Beautiful_Soup_(HTML_parser)"
# Fetch URL Content
r = requests.get(url)
# Get body content
soup = BeautifulSoup(r.text,'html.parser').select('body')[0]
# Initialize variable
paragraphs = []
images = []
link = []
heading = []
remaining_content = []
# Iterate throught all tags
for tag in soup.find_all():
# Check each tag name
# For Paragraph use p tag
if tag.name=="p":
# use text for fetch the content inside p tag
paragraphs.append(tag.text)
# For Image use img tag
elif tag.name=="img":
# Add url and Image source URL
images.append(url+tag['src'])
# For Anchor use a tag
elif tag.name=="a":
# convert into string and then check href
# available in tag or not
if "href" in str(tag):
# In href, there might be possible url is not there
# if url is not there
if "https://en.wikipedia.org/w/" not in str(tag['href']):
link.append(url+tag['href'])
else:
link.append(tag['href'])
# Similarly check for heading
# Six types of heading are there (H1, H2, H3, H4, H5, H6)
# check each tag and fetch text
elif "h" in tag.name:
if "h1"==tag.name:
heading.append(tag.text)
elif "h2"==tag.name:
heading.append(tag.text)
elif "h3"==tag.name:
heading.append(tag.text)
elif "h4"==tag.name:
heading.append(tag.text)
elif "h5"==tag.name:
heading.append(tag.text)
else:
heading.append(tag.text)
# Remain content will store here
else:
remaining_content.append(tag.text)
print(paragraphs, images, link, heading, remaining_content)
输出:
2. 页面内容:
为了提取文章的内容,我们将使用page()方法和content属性来获取实际数据。
Syntax: wikipedia.page(“Enter Query”).content
蟒蛇3
wikipedia.page("Python (programming language)").content
输出:
3. 从维基百科中提取图像。
Syntax: wikipedia.page(“Enter Query”).images
蟒蛇3
wikipedia.page("Python (programming language)").images
输出:
4. 提取当前页面 URL:
使用page()方法和url属性。
Syntax: wikipedia.page(“Enter Query”).url
蟒蛇3
wikipedia.page('"Hello, World!" program').url
输出:
'https://en.wikipedia.org/wiki/%22Hello,_World!%22_program'
5. 获取文章分类列表。
使用page()方法和类别属性。
Syntax: wikipedia.page(“Enter Query”).categories
蟒蛇3
wikipedia.page('"Hello, World!" program').categories
输出:
['Articles with example code',
'Articles with short description',
'Commons category link is on Wikidata',
'Computer programming folklore',
'Short description is different from Wikidata',
'Test items in computer languages',
'Webarchive template wayback links']
6. 获取一篇文章的所有链接列表
Syntax: wikipedia.page(“Enter Query”).links
蟒蛇3
wikipedia.page('"Hello, World!" program').links
输出:
7. 获取不同语言的数据。
现在我们将看到语言转换,为了转换成另一种语言,我们将使用set_lang()方法。
Syntax: wikipedia.set_lang(“Enter Language Type”)
蟒蛇3
wikipedia.set_lang("hi")
wikipedia.summary('"Hello, World!" program')
输出:
方法二:使用请求, BeautifulSoup
在这种方法中,我们将使用 Web Scraping。
为了在Python中进行抓取,我们将使用两个模块:
- bs4: Beautiful Soup(bs4) 是一个Python库,用于从 HTML 和 XML 文件中提取数据。这个模块没有内置于Python中。要安装此类型,请在终端中输入以下命令。
pip install bs4
- 请求:请求允许您非常轻松地发送 HTTP/1.1 请求。这个模块也没有内置于Python中。要安装此类型,请在终端中输入以下命令。
pip install requests
数据将被提取:-
- 段落
- 图片
- 图像列表
- 标题
- 不需要的内容(剩余内容)
方法:
- 获取 HTML 代码
- 从 HTML 代码中,获取body标签内的内容
- 遍历正文内容并获取上述数据
下面是完整的实现:
蟒蛇3
# Import Module
from bs4 import *
import requests
# Given URL
url = "https://en.wikipedia.org/wiki/Beautiful_Soup_(HTML_parser)"
# Fetch URL Content
r = requests.get(url)
# Get body content
soup = BeautifulSoup(r.text,'html.parser').select('body')[0]
# Initialize variable
paragraphs = []
images = []
link = []
heading = []
remaining_content = []
# Iterate throught all tags
for tag in soup.find_all():
# Check each tag name
# For Paragraph use p tag
if tag.name=="p":
# use text for fetch the content inside p tag
paragraphs.append(tag.text)
# For Image use img tag
elif tag.name=="img":
# Add url and Image source URL
images.append(url+tag['src'])
# For Anchor use a tag
elif tag.name=="a":
# convert into string and then check href
# available in tag or not
if "href" in str(tag):
# In href, there might be possible url is not there
# if url is not there
if "https://en.wikipedia.org/w/" not in str(tag['href']):
link.append(url+tag['href'])
else:
link.append(tag['href'])
# Similarly check for heading
# Six types of heading are there (H1, H2, H3, H4, H5, H6)
# check each tag and fetch text
elif "h" in tag.name:
if "h1"==tag.name:
heading.append(tag.text)
elif "h2"==tag.name:
heading.append(tag.text)
elif "h3"==tag.name:
heading.append(tag.text)
elif "h4"==tag.name:
heading.append(tag.text)
elif "h5"==tag.name:
heading.append(tag.text)
else:
heading.append(tag.text)
# Remain content will store here
else:
remaining_content.append(tag.text)
print(paragraphs, images, link, heading, remaining_content)
例子: