欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正则表达式获取诗词内容

程序员文章站 2022-07-10 09:22:20
...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import requests, re # 引入网络请求模块与表达式模块


# 解析网页
def parse_page(url):
    # 请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    # 请求的数据存储到变量内
    text = response.text
    # print(text)  # 获取所有请求的数据
    title = re.findall('<div class="cont">.*?<b>(.*?)</b>', text, re.DOTALL)  # \s代表空格,re.DOTALL代表匹配所有字符(.匹配\n)
    # print(title)  # 获取标题
    dynasty = re.findall('<p class="source">.*?<a.*?>(.*?)</a>', text,
                         re.DOTALL)  # re.S:不匹配换行符(re.DOTALL与re.S是相等的,可以随意使用)
    # print(dynasty)  # 获取朝代
    author = re.findall('<p class="source">.*?<a.*?>.*?<a.*?>(.*?)</a?', text, re.DOTALL)
    # print(author)  # 获取作者名称
    contents = re.findall('<div class="contson".*?>(.*?)</div>', text, re.S)

    # 定义一个空的列表容器,用来存放古诗词内容
    content_data = []

    for content in contents:
        # print(content.sub(''))  # 获取古诗词内容,但是古诗词内容中有br标签
        x = re.sub('<.*?>', '', content)  # 使用sub函数去除古诗词内容中的br标签
        # print(x.strip())  # 但是内容中有换行,需要使用strip方法去除换行
        content_data.append(x.strip())  # 把古诗词内容追加到列表容器中

    # 定义一个空的列表容器,用来存放返回来的数据
    date = []

    # 使用zip函数以元组形式返回
    for value in zip(title, dynasty, author, content_data):
        title, dynasty, author, content_data = value
        data = {
            'title': title,
            'dynasty': dynasty,
            'author': author,
            'content_data': content_data
        }
        date.append(data)  # 数据追加到列表容器中

    for dates in date:
        print(dates)


# 主程序
def main():
    # 古诗词网址
    for url in range(1, 10):
        # 古诗词网址
        urls = 'https://www.gushiwen.org/default_%s.aspx' % url
        parse_page(urls)


# 测试方法
if __name__ == '__main__':
    main()

 

相关标签: Re