python写一个爬虫(3)

6、正文
终于到了正文的解析了:
比较简单:

zb=r'<div id="content"><div id="adright"></div>(.*?)<div'
    mainBodyL=re.findall(zb,DData,re.S)
    mainBody=mainBodyL[0]
    mainBody=mainBody.replace('<br />','\n')
    mainBody=mainBody.replace('&nbsp;',' ')
    return mainBody

现在已经基本完成了目标要达到的所有内容了,现在要做的就是把每一章保存下来。
使用代码:

def saveDataFileN(DData,DFileN):
    f = open(DFileN,'w', encoding = LXBM)
    f.write(DData)
    f.close()

现在基本已经实现了所有的功能代码如下:

#getStory
#爬取一个小说网的一部小说。
import urllib.request
import re
import time

targetDir='Y://斗破苍穹分章下载/' #文件的保存路径
LXBM='gbk' #文件的编码类型,需要单独设置
weburlT='http://www.bxwx.org/b/8/8823/'
weburlN='5789596.html'
weburl=weburlT + weburlN
webheaders={
    'Connection':'Keep_Alive',
    'Accept':'text/html,application/xhtml+xml,*/*',
    'Accept-Language':'zh-CN,zh;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER',
    } #报头,模拟浏览器的访问行为

def getDate(Burl,Bheaders):
    #根据url地址得到该url中的文本数据
    req = urllib.request.Request(url=Burl,headers=Bheaders)#构造请求头
    data = urllib.request.urlopen(req).read() #读取数据
    data1 = data.decode(LXBM,'ignore') #把读取的数据转换为utf-8的格式
    return data1

def saveDataFileN(DData,DFileN):
    #保存文件,传入的为文件数据,文件名
    f = open(DFileN,'w', encoding = LXBM)
    f.write(DData)
    f.close()

def getTitle(DData): #得到文章的题目
    zb=r'<div id="title">(.*?)</div>' #正则表达式 查找内容
    titleL=re.findall(zb,DData)
    print(titleL[0])
    title = titleL[0]
    title = title.replace('?','')
    return title

def getNext(DData): #得到下一章的url 最后一章没有返回值
    zb=r'录</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="(.*?)">下一'
    nextL=re.findall(zb,DData)
    #print(nextL[0])
    if nextL:
        return nextL[0]
    return 0

def getNr(DData): #读取正文内容
    zb=r'<div id="content"><div id="adright"></div>(.*?)<div'
    mainBodyL=re.findall(zb,DData,re.S)
    mainBody=mainBodyL[0]
    mainBody=mainBody.replace('<br />','\n')
    mainBody=mainBody.replace('&nbsp;',' ')
    return mainBody

if __name__ == '__main__': #程序运行的入口
    num = 0
    while True:
        html=getDate(weburl,webheaders)
        title = getTitle(html)#得到这一章的题目
        body = getNr(html) #得到内容
        text='      ' + title + '\n' + body
        num =num + 1
        file=targetDir + str(num) + title +'.txt'
        saveDataFileN(text, file) #保存到单章中
        Nurl=getNext(html)#得到下一章的url
        if Nurl == 0:#如果是最后一章则跳出去
            break
        weburl=weburlT+Nurl
        print(weburl)
        time.sleep(0.15) #睡眠50毫秒,防止被封ip
    print('end')

在执行时出现了一个OSError :可能的原因是存文件名时有一个英文的’?‘通过在字符串中的替换成功解决了这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值