python小说爬虫,完美运行

import random
import requests
import re

header = [{
    'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36'},
    {
        'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},
    {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)'},
    {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},
    {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)'}]


# header 是用来伪装成浏览器发送请求,一般加上最好,header 信息可以通过浏览器查看,也可在网上搜索得到。

# 定义一个获取所有章节 URL 的函数
def get_url(url):
    req = requests.get(url, headers=header[random.randint(0, 4)])
    result = req.content
    result = result.decode('gbk')
    res = r'<dd class="col-md-3"><a href=(.*?) title='  # 制定获取 url 的匹配规则,不知道是不是为了反爬,包裹url 的部分用的是单引号,部分用的双引号。故在匹配的时候,没有写入,到后面再处理这个问题。
    list_url = re.findall(res, result)
    list_url_ = []  # 定义一个空列表,来装处理后的各个章节的 url
    for url_ in list_url:
        if '"' in url_:  # 用 if 语句分别来处理单引号和双引号的问题,然后组装成完整的 URL
            url_ = url_.replace('"', '')
            url_ = url_.replace('"', '')
            list_url_.append('http://www.biqukan.cc/book/20461/' + url_)
        elif "'" in url_:
            url_ = url_.replace("'", '')
            url_ = url_.replace("'", '')
            list_url_.append('http://www.biqukan.cc/book/20461/' + url_)
    return list_url_


def getBook(urls):
    req1 =urls
    j = len(req1)
    print('总章数:', j, '章')
    for i in range(len(req1)):
        resultBook = requests.get(req1[i], headers=header[random.randint(0, 4)])
        result1 = resultBook.content
        result1 = result1.decode('gbk')  # 查看网页源代码 看到 charset=gbk,即网页是用的 gbk 编码,故要用 gkb 的编码方式来解码,否则中文就会乱码。
        # result2 = req2.content
        # result2 = result2.decode('gbk')
        title_re = re.compile(r' <li class="active">(.*?)</li>')  # 取出文章的标题
        text_re = re.compile(r'<br><br>([\s\S]*?)</div>')  # 由于正文部分有很多的换行符,故要使用 [\s\S]
        title = re.findall(title_re, result1)  # 找出标题
        text1 = re.findall(text_re, result1)  # 找出第第一部分的正文
        # text2 = re.findall(text_re, result2)  # 找出第第二部分的正文
        title = title[0]  # 由于返回的 title 是列表,故取出列表中的第一项
        # print(title)  # 打印出标题
        # text1.append(text2[0])  # 把正文两个部分添加到同一列表中,方便处理
        text1 = '\r\n'.join(text1)  # 把两部分的正文连接成同一个个字符串
        text1 = text1.split('\r\n')  # 把字符串按照换行符分割
        text_1 = []  # 添加一个空列表,用来装处理后的正文
        text_1.append(title+'\n')
        for sentence in text1:
            sentence = sentence.strip()  # 去掉每一句两边的空格
            if ' ' in sentence:
                sentence = sentence.replace(' ', '')  # 去掉句子中的  
                if '<br />' in sentence:
                    # sentence = sentence.replace('<br />', '')  # 去掉句子中的 <br />
                    text_1.append(sentence)
                else:
                    text_1.append(sentence)
            elif '<br />' in sentence:
                sentence = sentence.replace('<br />', '')
                text_1.append(sentence)
            elif '-->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>' in sentence:
                sentence = sentence.replace(r'-->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>',
                                            '')  # 去掉 -->><p class="text-danger text-center mg0">本章未完,点击下一页继续阅读</p>
                text_1.append(sentence)
            else:
                text_1.append(sentence)
        count = text_1.count('')  # 统计列表中的空字符串
        for i in range(count):
            text_1.remove('')  # 移除所有的空字符串
        for sentence in text_1:
            print(str(sentence).replace('&nbsp;', ''))  # 打印出所有的正文
            # 打开一个文件
            fo = open('C:/Users/admin/Desktop/books/大主宰.txt', "a")
            book=str(sentence).replace('&nbsp;', '')
            fo.write('\n'+book+'\n')

            # 关闭打开的文件
            # fo.close()
        pass


if __name__ == '__main__':
    #网址换到小说目录层,可以直接打开这个网址查看案例
    url=get_url('https://www.biqukan.cc/book/20461/')
    book = getBook(url)
    print('下载完成!')

 

代码简单使用,下载完后直接用浏览器打开就行,自动就格式化了,可以不用调格式

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼古拉斯++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值