python爬虫笔趣阁下载小说

本人是做java开发的,闲来无事学习了python觉得挺有意思,然后使用python写了一个小爬虫来获取自己喜欢的小说跟大家分享一下过程!(学习中有疑问可以下方留言,大家一起谈论学习)

声明:以下代码仅供参考学习,如果利用代码造成目标网站故障或者其他问题,本人概不负责,特此声明!!!

引入相关包(我是做java的习惯这么描述,往下看吧)

import requests
import re
import traceback

爬取目标网站路径

url = 'http://www.xbiquge.la/10/10489/'

模拟浏览器请求

respone = requests.get(url)

设置编码

respone.encoding = 'utf-8'

获取请求内容

从respone对象里获取网站内容(我们是从网站内容里取出想要的东西的)

html = respone.text

小说标题从html中获取章节标题

tittle = re.findall(r'<dd>(.*?)</dd>', html)

新建文件保存小说内容

这里将获取的到内容写入到本地了

fb =open('三寸天堂.txt', 'w',encoding='utf-8')

解析a标签内部文字的正则

res = r'<a .*?>(.*?)</a>'

下面看完整代码吧

import requests
import re
import traceback
#获取资源路径
url = 'http://www.xbiquge.la/10/10489/'
#模拟浏览器请求
respone = requests.get(url)
#设置编码
respone.encoding = 'utf-8'
#获取请求内容
html = respone.text

#小说标题从html中获取章节标题
tittle = re.findall(r'<dd>(.*?)</dd>', html)
#新建文件保存小说内容
fb =open('三寸天堂.txt', 'w',encoding='utf-8')
count = 0
#len()是python函数,计算集合长度,计算出总共有多少章节
num = len(tittle)
try:
    for i in tittle:
        #计数,控制循环
        count+=1
        #解析a标签内部文字的正则表达式
        res = r'<a .*?>(.*?)</a>'
        #获取a标签文字
        content = re.findall(
            res, i, re.S | re.M)[0]
        #解析a标签内部链接的正则表达式
        res_url = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
        link = re.findall(res_url, i, re.I | re.S | re.M)[0]
        #拼接章节链接
        allLink = 'http://www.xbiquge.la'+link
        #print(allLink+content)
        #模拟GET请求
        # 模拟浏览器请求务必加入timeout,防止影响目标网站速度
        contentRespone = requests.get(allLink,timeout=8)
        # 设置编码
        contentRespone.encoding = 'utf-8'
        # 获取请求内容
        contentHtml = contentRespone.text
        state = contentRespone.status_code
        #处理异常情况,防止程序中断
        if state != 503:
            contentDiv = re.findall(r'<div id="content">(.*?)</p></div>', contentHtml)[0]
            dr = re.compile(r'<[^>]+>',re.S)
            dd = dr.sub('', contentDiv)
            nbspStr = re.compile(r'[&nbsp;]',re.S)
            nbsp = nbspStr.sub('', dd)
            # 持久化

            print('写入文件开始 章节:'+content)
            fb.write(content)
            fb.write('\n')
            fb.write(nbsp)

            fb.write('\n\n\n')
            fb.write('*******************************************'
                     '分割符'
                     '*******************************************')
            fb.write('\n\n\n')
        if count == num:
            break
except Exception as e:
    fb.close()
    print(e)
    print('写入文件异常')
    traceback.print_stack()


finally:
    fb.close()
    print('写入文件结束')
如果我的文章能帮到您,不妨给个赞赏以资鼓励,我会继续努力,跟大家一起分享学习更多的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值