吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7537|回复: 20
收起左侧

[Python 转载] python爬取并处理起点中文网的小说内容

[复制链接]
wuse111 发表于 2020-10-5 21:15
    如题所示,爬取起点中文网的小说文本内容,不属于破解vip章节,只是交流爬取和处理文本。
   具体的分析过程就不说明了,在代码中会有注释说明,有不懂的可以私信来问  
   
[Python] 纯文本查看 复制代码
def get_qidian(url):
    import requests
    import json
    import re
    from lxml import etree

    #设置全局变量
    some_ = ''
    #提取bookid
    bid = url.split("/")[-1]
    # print(bid)
    headers ={
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
    }
    res = requests.get(url, headers=headers)
    #提取后面用到的refer
    new_url = 'https:' + re.search(re.compile(r'<a class="red-btn J-getJumpUrl " href="(.*?)"'), res.text).group(1)
    #提取小说名字
    title = re.search(re.compile('《(.*?)》'), res.text).group(1)

    #两种提取cookie成字典模式
    #第一种
    # print(res.cookies.list_domains())
    # print(res.cookies.list_paths())
    # print(res.cookies.get_dict(res.cookies.list_domains()[0],res.cookies.list_paths()[0]))

    #第二种
    cookie = requests.utils.dict_from_cookiejar(res.cookies)
    Token = cookie['_csrfToken']

    #更新字典的headers
    headers.update({"x-requested-with": "XMLHttpRequest", "referer": new_url})
    headers.update(cookie)
    #解码返回的内容
    res = requests.get(f'https://read.qidian.com/ajax/book/category?_csrfToken={Token}&bookId={bid}',
                       headers=headers).text.encode("raw_unicode_escape").decode()
    # 把返回的内容转为json格式
    res = json.loads(res)
    headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
    }
    #提取列表
    for s in res['data']['vs']:
        #提取目录内容
        for i in s['cs']:
            #提取章节名字
            chapter = i['cN']
            #提取链接后半部分
            ch_url = 'https://read.qidian.com/chapter/' + i['cU']
            # print(chapter)
            # print(ch_url)
            #https://read.qidian.com/chapter/
            #<div class="read-content j_readContent">
            res = requests.get(ch_url, headers=headers).text
            # print(res)
            #通过etree提取每一章的内容
            selector = etree.HTML(res)
            txt_ = selector.xpath('//div[@class="read-content j_readContent"]/p/text()')
            # print(txt_)
            all_txt = ''
            for g in txt_:
                #对每一条内容进行处理
                g = str(g)
                g = g.replace('\u3000\u3000', '').replace('\n', '').strip() + '\n'
                all_txt = all_txt + g
            #把所有内容放在一个变量里,最后再保存
            all_txt = chapter + '\n\n' + all_txt
            some_ = some_ + all_txt
    #把所有处理好了,进行写出保存
    with open(f'{title}.txt', 'w') as f:
        f.write(some_)
        f.close()


if __name__ == '__main__':
    get_qidian('https://book.qidian.com/info/1018027842')



免费评分

参与人数 6吾爱币 +8 热心值 +6 收起 理由
paguco + 1 + 1 热心回复!
似水流年2015 + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
tuhaojun + 1 + 1 热心回复!
苏紫方璇 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sk3 + 1 + 1 热心回复!
二诗的Adidas + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hshcompass 发表于 2020-10-7 17:31
不会pytho,支持一下n,支持一下。
 楼主| wuse111 发表于 2020-10-15 18:08
小宙 发表于 2020-10-12 13:55
请问,encode("raw_unicode_escape")的参数是怎么才能知道要这么设置的

在数据包的请求头和网页源代码的头部都有标注编码,如果没有的话,就根据返回的内容来确定编码
二诗的Adidas 发表于 2020-10-5 21:20
sk3 发表于 2020-10-5 21:24
好人一生平安,有空我试试
剑九黄 发表于 2020-10-5 21:26
谢谢分享
Supermexyh 发表于 2020-10-5 21:36
这个有趣,看看
2296617615 发表于 2020-10-5 21:45
感谢楼主分享
路桥 发表于 2020-10-5 22:08
感谢分享
爱偏离轨道 发表于 2020-10-5 22:16
这个有点意思 看看
bookaccount 发表于 2020-10-5 22:41
没有出错处理,只能祈祷一切顺利不出错
sosme2012 发表于 2020-10-5 23:16
VIP内容爬取不到吗。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 14:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表