Python用正则表达式实现爬取古诗文网站信息

以下是“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技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

合作推广
合作推广
分享本页
返回顶部