Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索
admin
2023-07-23 05:02:13
0

 python编译练习,为了将自己学习过的知识用上,自己找了很多资料。所以想做一个简单的爬虫,代码不会超过60行。主要用于爬取的古诗文网站没有什么限制而且网页排布很规律,没有什么特别的东西,适合入门级别的爬虫。


抓取目标站点的准备工作


Python的版本是:3.4.3.


爬取的目标是: 古诗文网(www.xzslx.net)


随意打开一个古诗文网的古诗页面,查看它的网页地址就能看到,古诗的地址基本是 “www.xzslx.net/shi/+ id + .html” 构成,如下图:


Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索


然后对古诗文网的古诗总览页面可以看到分页符 最下方:


Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索

总共包括29830篇古诗文可以抓取,确定了”/shi/”后面数字的范围。


html页面解析库:BeautifulSoup 

安装方式是: $pip3 install BeautifulSoup4


主要参考文献:《python网络数据采集》第一、二章

代码解析:

#!usr/bin/python3
# -*- coding:utf-8 -*-

import re
from urllib.request import urlopen
from urllib.erroe import HTTPError
from bs4 import BeautifulSoup

def getPage(url) :
    try :
        html = urlopen(url)
    except HTTPError as e :
        return None
    try :
        bsObj = BeautifulSoup(html)
    except AttributeError as e :
        return None
    return bsObj

def getUrl(pg) :
    return ''.join(('http://www.xzslx.net/shi/', str(pg),'.html'))

f = open('./result.txt', 'wt')

for pg in range(0, 49149) :
    html = getPage(getUrl(pg))
    cont = (html.findAll('div', {'class' : 'son2'}))
    if cont != None and len(cont) > 1 :
        cont = cont[1].get_text()
        poem = cont[cont.find('原文:') + 4:]
        sentList = re.findall(r'(.*?[。!?])', poem)
        for sentc in sentList :
            if '月' in sentc :
                print (sentc, '\t--- <', html.find('h2').get_text(), '>', file = f)
    print ('--- page', pg, ' dealed ---')

getPage(url) 函数的主要参考请看《python网络数据采集》第9页里面的代码。采用try...catch...防止采集的页面是发生异常而导致爬虫终止。

getUrl(pg) 函数主要是方便url的组成,了解join()函数是python的基础,很简单不用细说。 

open() 函数用于打开文档,这里我打开一个 result.txt 的文档存放爬取的结果。 

名为html的变量代表的是一个通过getPage()函数获取的BeautifulSoup对象,观察原页面可发现诗歌内容存放在一个属性“class = ‘son2’”的div内,而且是html文档中第二个这样的标签(第一个这样的标签是搜索框)。

使用get_text()函数获取

 的文字内容,整首诗存放在“原文:”的后面,故在所获的内容中找到”原文:”的位置并向后偏移3个位置加一个换行符总共4个字符,便得到了原诗的内容。

诗歌的单句以“。”, “!”, “?”结尾,故将诗句拆分成单句的正则表达式为  '(.*?[。!?])' , “.*?” 表示python正则中的非贪婪模式,[]内的内容表示任选其一,()则是为了找到匹配结果并存放。

得到单句以后只需要判断”月”字是否在诗句中即可,有则输出到result.txt 中,没有则判断下一句。

print ('---page', pg, 'dealed---') 在命令行里输出爬取的状态,方便目测爬取的进度。


最后的结果是:

Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索

相关内容

热门资讯

假大师虚构鬼神,性侵一对母女获... “大师说只有跟他‘炼精化气’才能达到‘取坎填离’的效果,从而祛病消灾,实现逆势改命。我当时信以为真了...
快热式电热水器不出热水 发现热水器不出热水,这时候需要先检查冷热水管的安装,接反了的情况下热水器没有检测到水流动,自然是不会...
快热式热水器的组装方法 快热式热水器是一种现代化的热水器设备,安装方便,取暖速度非常快速。以下是快热式热水器的组装方法: ...
万和热水器e4故障是什么如何排... 万和热水器e4故障是什么如何排除万和热水器显示e4是高温报警,及干烧预警,热水出口温度在85℃以上。...
康泉电热水器故障排除 常见的故障有几种,一是热水器在加热的过程中,从安全阀孔中流出水滴,这种情况需要先关闭进水阀,然后将混...
莱宾热水器E4故障代码 莱宾热水器E4故障代码表示出水温度过高或传感器故障。其原因可能是水压过大,使水温过高;水阀门损坏或不...
赖清德妄称不会放弃提高防务支出... 澎湃新闻记者 李文姬2026年6月24日上午,国台办在新闻发布厅举行例行新闻发布会,发言人张晗就近期...
凡星闪耀丨一抹天青写人生——记... 李晓涓在精心打磨作品。李晓涓在制作汝瓷。李晓涓汝瓷作品《听福》。李晓涓汝瓷作品《祥瑞》。孟玉松汝瓷作...
探寻河南党史里的第一次丨郑州大... “嵇文甫一生从教无怨无悔,把所有的爱都倾注在学生身上,很多学生受他学术启迪学习成才。作为真正的&ls...
河南省省长质量(专利)奖揭晓 ... 河南日报讯 (全媒体记者 孔学姣)6月23日,记者获悉,省政府近日发布《关于授予河南省省长质量(专利...