千家信息网

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

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"Python怎么用正则表达式实现爬取古诗文网站信息"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能
千家信息网最后更新 2026年11月03日Python怎么用正则表达式实现爬取古诗文网站信息

本篇内容介绍了"Python怎么用正则表达式实现爬取古诗文网站信息"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    分析古诗文网站

    下图1展示了古诗文网站-》诗文 栏目的首页数据。

    第二页的地址是:https://so.gushiwen.cn/shiwens/default.aspx?page=2&tstr=&astr=&cstr=&xstr= 。依次类推第n页的地址就是page=n。其他不变。

    1. 用正则表达式获取总页数

    匹配的正则表达式是r'

    .*?(.*?)'

    1. 首先,r修饰的字符串是原生字符串,首先匹配到

    2. 通过匹配到存放总页数的标签。在标签里指定.*?

    3. (.*?) 加上() 可以指定不同的分组,这里我们只需要获取页数所以就单独添加一个分组。

    所以,最终的代码是:

     def get_total_pages():    resp = requests.get(first_url)    # 获取总页数    ret = re.findall(r'
    .*?(.*?)', resp.text, re.DOTALL) result = re.search('\d+', ret[0]) for page_num in range(int(result.group())): url = 'https://so.gushiwen.cn/shiwens/default.aspx?page=' + str(page_num) parse_page(url)

    在findall方法中传入re.DOTALL参数是为了是. 号可以匹配到换行符\n。

    前面ret的结果是/ 5页。再获取5这个数字的话,还需要做一次匹配查找,这就是通过re.search('\d+', ret[0]) 来进行查找。

    2. 提取诗的标题

    如上图2展示了诗的标题的HTML源码,从中可以看出诗的标题被存在标签 匹配诗的标题的正则表达式是

    .*?(.*?)

    首先还是匹配到

    标签,接着就是匹配(.*?) 这里还是采用非贪婪模式来进行匹配。

    3. 提取作者和朝代

    如上图3展示了诗的作者和朝代的HTML源码,从中可以看出作者和朝代都是在

    标签下的两个a标签中。

    3.1 提取作者

    提取作者的正则表达式是

    .*?(.*?) 首先还是匹配到

    标签。接着就是匹配第一个 标签中的内容。

    3.2 提取朝代

    提取朝代的正则表达式是

    .*?(.*?) 与提取作者不同的是多了一个 ,这是因为朝代在第二个标签中。

    4. 提取诗的内容

    如上图4展示了诗的内容的HTML源码,从中可以看出诗句都在

    标签中,所以只需要匹配到这个标签里的内容即可。其正则表达式是
    (.*?)
    。

    但是这样匹配出来的数据是包含
    标签的。所以,我们需要通过sub 方法将这个标签替换掉。re.sub(r'<.*?>+', "", content)。

    整理代码

    至此,我们就将所有想要的数据都提取到了。接下来,我们还需要对数据进行处理。我们期望的最终数据格式是:

     poems=[        {            "title": '渔家傲·花底忽闻敲两桨',            "author":'张三',            'dynasty':'唐朝',            'content':'xxxxxx'        }          {            "title": '鹅鹅鹅',            "author":'李四',            'dynasty':'唐朝',            'content':'xxxxxx'        }    ]

    前面,我们分别得到了所有标题的列表titles;所有作者的列表authors;所有朝代的列表dynastys;所有诗句的列表contents。

    那么,我们如何将这些列表组合成上面的那种形式呢?

    这里,就需要用到 zip 函数了。该函数可以将多个列表组合成一个新的列表,其中列表的元素是元组。比如:

    a=['name','age']b=['张三',18]c=zip(a,b)

    调用zip 方法之后得到一个zip对象,该对象可以转换成list 对象。最终得到的结果如下图5

    完整源代码

    # -*- utf-8 -*-"""@url: https://blog.csdn.net/u014534808@Author: 码农飞哥@File: gushiwen_rep.py@Time: 2021/12/7 07:40@Desc: 用正则表达式爬取古诗文网站古诗文网站的地址:https://www.gushiwen.cn/"""import reimport requestsheaders = {    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36'}first_url = 'https://so.gushiwen.cn/shiwens/default.aspx'def get_total_pages():    resp = requests.get(first_url)    # 获取总页数    ret = re.findall(r'
    .*?(.*?)', resp.text, re.DOTALL) result = re.search('\d+', ret[0]) for page_num in range(int(result.group())): url = 'https://so.gushiwen.cn/shiwens/default.aspx?page=' + str(page_num) parse_page(url)# 解析页面def parse_page(url): resp = requests.get(url) text = resp.text # 提取标题 (.*) 进行分组,只提取标签中的内容,默认情况下 .不能匹配\n。加上re.DOTALL 表示.号可以匹配所有,贪婪模式 # titles = re.findall(r'
    .*(.*)', text,re.DOTALL) # 非贪婪模式 titles = re.findall(r'
    .*?(.*?)', text, re.DOTALL) # 提取作者 authors = re.findall(r'

    .*?(.*?)', text, re.DOTALL) # 提取朝代 dynastys = re.findall(r'

    .*?(.*?)', text, re.DOTALL) # 提取诗句 content_tags = re.findall(r'

    (.*?)
    ', text, re.DOTALL) contents = [] for content in content_tags: content = re.sub(r'<.*?>+', "", content) contents.append(content) poems = [] for value in zip(titles, authors, dynastys, contents): # 解包 title, author, dynasty, content = value poems.append( { "title": title, "author": author, 'dynasty': dynasty, 'content': content } ) print(poems) """ poems=[ { "title": '渔家傲·花底忽闻敲两桨', "author":'张三', 'dynasty':'唐朝', 'content':'xxxxxx' } { "title": '渔家傲·花底忽闻敲两桨', "author":'张三', 'dynasty':'唐朝', 'content':'xxxxxx' } ] """"""zip 函数a=['name','age']b=['张三',18]c=zip(a,b)c=[ ('name','张三'), ('age',18)]"""if __name__ == '__main__': get_total_pages()

    最终的运行结果是:

    "Python怎么用正则表达式实现爬取古诗文网站信息"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

    标签 正则 表达式 作者 朝代 网站 内容 古诗 古诗文 标题 张三 数据 页数 贪婪 字符 就是 模式 上图 从中 函数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网是第几次科技革命的成果 江苏根荣互联网科技 科技互联网企业 互联网科技有限公司经营范围 互联网和科技创新 上海喔噻互联网科技 易通互联网络科技有限公司 顺玮阁互联网科技 撒么互联网科技公司 多迪互联网科技有限公司 天速互联网络科技有限公司 链环科技传统企业怎么转型互联网 亳州好赞互联网科技有限公司 华夏恒生互联网科技013171 工业互联网展湾科技股份有限公司 湖北辰鑫科技互联网 银川新华互联网科技学校是国营吗 陕西彩京云互联网科技有限公司 承德科技产业互联网平台 中国主要互联网科技公司 互联网黑科技 互联网和科技技术 科技互联网龙头 中国互联网科技股 企晟互联网信息科技有限公司 国大互联网教育科技有限公司薪资 图游互联网科技 35岁以上互联网科技行业 郑州欣桑互联网科技有限公司 宁波允成互联网科技有限公司
    0