python爬取指定内容_Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索

本文是 Python 编译练习,作者做了一个不超 60 行代码的简单爬虫,用于爬取古诗文网内容。介绍了抓取目标站点的准备工作,包括 Python 版本、目标网站、页面解析库等,还对代码进行了解析,最终将含“月”的诗句存入 result.txt 文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

抓取目标站点的准备工作

Python的版本是:3.4.3.

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

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

总共包括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('h1').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---')在命令行里输出爬取的状态,方便目测爬取的进度。

最后的结果是:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值