python爬取 笔趣阁 和 牧笔阁 网站的小说 代码

 笔趣阁和牧笔阁的网页结构十分相似,所以可以使用同一个代码,在添加了headers信息后,再在chapterUrl方法中更改headUrl变量的网址。

牧笔阁网址是:https://www.mubige.com 

笔趣阁网址是:http://www.tianxiabachang.cn

headers中的User-Agent信息

谷歌浏览器为例:随便打开一个网页F12  或右上角三个点>更多工具>开发者工具

python爬取 笔趣阁 和 牧笔阁 网站的小说 代码_第1张图片

 将User-Agent冒号后面的信息添加到代码中

import requests
from lxml import etree
import time

headers={'User-Agent': '添加电脑上的user-Agent信息'}
num=0
allnum=0

def writeInTxt(title,content,file_name):
    global num,allnum
    print(str(allnum)+'/'+str(num)+': '+title[0])
    num+=1
    file_write_in=open(file_name+'.txt','a',encoding='utf-8')
    file_write_in.write('\n\n\n\n'+title[0]+'\n\n')
    for content_ in content:
        if content_=='\n':
            pass
        else:
            file_write_in.write(content_)
    file_write_in.close


def getContent(infoUrl):
    contentReq=requests.get(infoUrl,headers=headers)
    contentReq.encoding=contentReq.apparent_encoding
    contentHtml=etree.HTML(contentReq.text)

    titleByXpath=contentHtml.xpath('//h1/text()')
    contentByXpath=contentHtml.xpath('//div[@id="content"]/text()')
    return (titleByXpath,contentByXpath)

def chapterUrl(InfoUrlList):
    fullChapterUrlList=[]
    for InfoUrlSingle in InfoUrlList:
        headUrl='https://www.mubige.com' #更改牧笔阁或笔趣阁网址
        fullUrl=headUrl+InfoUrlSingle
        fullChapterUrlList.append(fullUrl)
    return fullChapterUrlList


def getInfoUrl(novelUrl):
    global allnum,num
    novelReq=requests.get(novelUrl,headers=headers)
    novelReq.encoding=novelReq.apparent_encoding
    novelReqHtml=etree.HTML(novelReq.text)
    novelName=novelReqHtml.xpath('//h1/text()')
    contentUrl=novelReqHtml.xpath('//dd/a/@href')
    num=int(input('从第多少章节开始获取:'))
    starnum=num+8
    allnum=len(contentUrl[9:])
    print('《'+novelName[0]+'》一共有'+str(len(contentUrl[starnum:]))+'章节!!(注意爬取速度)')
    return (contentUrl[starnum:],novelName)

if __name__ == "__main__":
    novelUrl=input('请输入想要获取笔趣阁或牧笔阁的小说网址:')
    InfoUrlList,novelName=getInfoUrl(novelUrl)
    contentUrlList=chapterUrl(InfoUrlList)
    for contentUrl in contentUrlList:
        title,content=getContent(contentUrl)
        writeInTxt(title,content,novelName[0])
        # time.sleep(0.5)  #更改获取时间间隔

 运行代码后要求输入小说网址如下图。

python爬取 笔趣阁 和 牧笔阁 网站的小说 代码_第2张图片

注:如果遇到爬到一半突然报错的情况,可以重新运行然后更改 从出错的章节开始运行即可。 

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