第一个爬虫:爬取古诗中带有“月”字的诗句

引言

为了练习python,所以到处找资料试着写了一个自己的爬虫。因为是第一个爬虫,所以比较简单,不超过50行。主要源于爬取的网站没有什么限制而且网页排布很规律,也就没有什么技术亮点,单纯的入门爬虫而已。

爬取目标及准备

python版本:3.4.3

爬取对象: 古诗文网(so.gushiwen.org)

随便点开一个古诗文网的诗歌页面,观察它的URL地址就会发现,诗歌的地址基本由 “so.gushiwen.org/view_ + 数字 + .aspx” 构成,如下图:

古诗文网URL

通过对古诗文网的诗歌总览页面 最下方这个地方可以看出:

这里写图片描述

总共有49148篇古诗可以爬取,确定了”view_”后面数字的范围。

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://so.gushiwen.org/view_', str(pg),'.aspx'))

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()函数获取<div class = 'son2'> 的文字内容,整首诗存放在“原文:”的后面,故在所获的内容中找到”原文:”的位置并向后偏移3个位置加一个换行符总共4个字符,便得到了原诗的内容。

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

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

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

爬取结果

爬取结果

第一次写爬虫,献丑了。。。

以上です~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值