以下是“Python用正则表达式实现爬取古诗文网站信息”的完整攻略:
一、问题描述
在爬取网页内容时,我们经常需要使用正则表达式来匹配和提取特定的信息。本文将介绍如何使用Python和正则表达式来爬取古诗文网站的诗词信息。
二、解决方案
2.1 发送HTTP请求,获取网页内容
我们首先需要使用Python的requests库发送HTTP请求,获取古诗文网站的网页内容。以下是一个示例代码:
import requests
url = 'https://www.gushiwen.org/'
response = requests.get(url)
if response.status_code == 200:
html = response.text
在这个例子中,我们使用requests库发送HTTP请求,获取古诗文网站的网页内容。如果响应状态码为200,则说明请求成功,我们可以使用response.text属性获取网页内容。
2.2 使用正则表达式匹配诗词信息
我们可以使用正则表达式来匹配古诗文网站中的诗词信息。以下是一个示例代码:
import re
pattern = r'<div\sclass="cont">.*?<b>(.*?)</b>.*?<p\sclass="source">.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?<div\sclass="contson"\s.*?>(.*?)</div>'
results = re.findall(pattern, html, re.S)
for result in results:
title = result[0]
author = result[1]
dynasty = result[2]
content = result[3]
print('题目:', title)
print('作者:', author)
print('朝代:', dynasty)
print('内容:', content)
在这个例子中,我们使用正则表达式匹配古诗文网站中的诗词信息。正则表达式中的“
.
?”表示匹配包含诗词信息的div标签,并将诗词信息的题目、作者、朝代和内容作为捕获组。我们使用re.findall()方法来查找所有匹配的结果,并使用re.S标志来匹配跨行的文本。
2.3 保存诗词信息到本地文件
最后,我们可以将匹配到的诗词信息保存到本地文件中。以下是一个示例代码:
import re
pattern = r'<div\sclass="cont">.*?<b>(.*?)</b>.*?<p\sclass="source">.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?<div\sclass="contson"\s.*?>(.*?)</div>'
results = re.findall(pattern, html, re.S)
with open('poems.txt', 'w', encoding='utf-8') as f:
for result in results:
title = result[0]
author = result[1]
dynasty = result[2]
content = result[3]
f.write('题目:' + title + '\n')
f.write('作者:' + author + '\n')
f.write('朝代:' + dynasty + '\n')
f.write('内容:' + content + '\n\n')
在这个例子中,我们使用with语句打开一个名为“poems.txt”的文件,并使用循环将匹配到的诗词信息写入文件中。
三、示例说明
以下是两个示例,演示了如何使用Python和正则表达式爬取古诗文网站的诗词信息:
3.1 爬取古诗文网站的唐诗信息
import requests
import re
url = 'https://www.gushiwen.org/'
response = requests.get(url)
if response.status_code == 200:
html = response.text
pattern = r'<div\sclass="cont">.*?<b>(.*?)</b>.*?<p\sclass="source">.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?<div\sclass="contson"\s.*?>(.*?)</div>'
results = re.findall(pattern, html, re.S)
with open('tang_poems.txt', 'w', encoding='utf-8') as f:
for result in results:
title = result[0]
author = result[1]
dynasty = result[2]
content = result[3]
if dynasty == '唐代':
f.write('题目:' + title + '\n')
f.write('作者:' + author + '\n')
f.write('朝代:' + dynasty + '\n')
f.write('内容:' + content + '\n\n')
在这个例子中,我们使用requests库发送HTTP请求,获取古诗文网站的网页内容。然后使用正则表达式匹配包含诗词信息的div标签,并将诗词信息的题目、作者、朝代和内容作为捕获组。最后,我们将匹配到的唐诗信息保存到本地文件中。
3.2 爬取古诗文网站的宋词信息
import requests
import re
url = 'https://www.gushiwen.org/'
response = requests.get(url)
if response.status_code == 200:
html = response.text
pattern = r'<div\sclass="cont">.*?<b>(.*?)</b>.*?<p\sclass="source">.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?<div\sclass="contson"\s.*?>(.*?)</div>'
results = re.findall(pattern, html, re.S)
with open('song_ci.txt', 'w', encoding='utf-8') as f:
for result in results:
title = result[0]
author = result[1]
dynasty = result[2]
content = result[3]
if dynasty == '宋代':
f.write('题目:' + title + '\n')
f.write('作者:' + author + '\n')
f.write('朝代:' + dynasty + '\n')
f.write('内容:' + content + '\n\n')
在这个例子中,我们使用requests库发送HTTP请求,获取古诗文网站的网页内容。然后使用正则表达式匹配包含诗词信息的div标签,并将诗词信息的题目、作者、朝代和内容作为捕获组。最后,我们将匹配到的宋词信息保存到本地文件中。
以上就是“Python用正则表达式实现爬取古诗文网站信息”的完整攻略,包括问题描述、解决方案和两个示例说明。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python用正则表达式实现爬取古诗文网站信息 - Python技术站