python写一个爬虫(3)

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

zb=r'
(.*?) mainBodyL=re.findall(zb,DData,re.S) mainBody=mainBodyL[0] mainBody=mainBody.replace('
'
,'\n') mainBody=mainBody.replace(' ',' ') 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'
(.*?)
'
#正则表达式 查找内容 titleL=re.findall(zb,DData) print(titleL[0]) title = titleL[0] title = title.replace('?','') return title def getNext(DData): #得到下一章的url 最后一章没有返回值 zb=r'录        下一' nextL=re.findall(zb,DData) #print(nextL[0]) if nextL: return nextL[0] return 0 def getNr(DData): #读取正文内容 zb=r'
(.*?) mainBodyL=re.findall(zb,DData,re.S) mainBody=mainBodyL[0] mainBody=mainBody.replace('
'
,'\n') mainBody=mainBody.replace(' ',' ') 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 :可能的原因是存文件名时有一个英文的’?‘通过在字符串中的替换成功解决了这个问题。

你可能感兴趣的:(python,python,爬虫)