正则表达式获取诗词内容
程序员文章站
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()
上一篇: 自动化安装redis
下一篇: linux sort 排序命令简介