学习日志,更新起点爬虫,下载已经付费订阅vip的章节

欢迎有大佬指点优化。

import requests
from pyquery import PyQuery as pq
import json
import sys

def load(name):
    # 获取起点的搜索页面
    url_select = 'https://www.qidian.com/search?kw=' + name
    response_select = requests.get(url_select).content.decode('utf8')
    doc_select = pq(response_select)
    # clear 加了items变成了生成器,
    clear_select = doc_select('.book-mid-info h4 a').items()
    # 获取书id,使用next进行迭代,由于只取第一个数据,所以不用for
    data_eid = next(clear_select).attr('data-bid')
    # print(data_eid)
    # 获取章节目录
    url_catalog = 'https://book.qidian.com/ajax/book/category?_csrfToken' \
                  '=KxOyODbbsZHWGtIfUsnDEqI9teZBDuUDC4QJ5YsZ&bookId=' + data_eid
    response_catalog = requests.get(url_catalog).content.decode('utf8')
    # 返回的是json格式其中包含起点所有的章节需要的id
    Json = json.loads(response_catalog)

    # 分析Json结构
    date = Json["data"]
    vs = date["vs"]
    for i in vs:
        cs = i["cs"]  # 包含正文的url的id以及章节名称
        vN = i["vN"]  # 分卷名称
        # with open(r'D:\Users\MSI-PC\Desktop\123.txt', encoding='utf8', mode='a+') as f:
        #     f.write(str(cs) + '\n')
        if vN == '作品相关':
            continue
        elif vN == 'VIP卷':
            for cU in cs:
                only = cU["id"]  # id是vip章节url的id
                cN = cU["cN"]  # 章节名称
                list_cU = {cN: str(only)}
                vip(list_cU, data_eid)
        else:
            for cU in cs:
                only = cU["cU"]  # cU是章节url的id
                cN = cU["cN"]  # 章节名称
                list_cU = {cN: only}
                down(list_cU)

# Cookie内容需要用自己账号登陆后产生的
headers = {

            'Cookie': ''
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KH'
                          'TML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
        }


# 已经订阅的VIP章节
def vip(ID_url, data_eid):
    # key是章节名称,value章节id
    for key, value in ID_url.items():
        # 组合完成的每一章节的url
        urls = f'https://vipreader.qidian.com/chapter/{data_eid}/{value}'
        response = requests.get(urls, headers=headers).content.decode('utf8')
        text = pq(response)
        # 使用PyQuery 筛选正文内容
        text_w = text(".read-content.j_readContent p")
        # 写入标题
        with open(r'D:\Users\MSI-PC\Desktop\123.txt', encoding='utf8', mode='a+') as f:
            f.write(str(key) + '\n')
        # 由于起点是每句一个<p></p>加属性 i获得是属性,需要加text方法获得内容
        # 之所以不整个列表打印,是因为好看=-=所以和页面同步,逐段打印
        for i in text_w:
            # 为了减少不必要的运行,一般未订阅的VIP章节,只能看三行,字数必然小于1000就直接停止程序
            if len(text_w.text()) > 1500:
                with open(r'D:\Users\MSI-PC\Desktop\123.txt', encoding='utf8', mode='a+') as f:
                    f.write(str(i.text) + '\n')
            else:
                with open(r'D:\Users\MSI-PC\Desktop\123.txt', encoding='utf8', mode='a+') as f:
                    f.write('对不起,未订阅' + '\n')
                sys.exit()


# 免费章节
def down(ID_url):
    # key是章节名称,value章节id
    for key, value in ID_url.items():
        # 组合完成的每一章节的url
        urls = 'https://read.qidian.com/chapter/' + value
        response = requests.get(urls).content.decode('utf8')
        text = pq(response)
        # 使用PyQuery 筛选正文内容
        text_w = text(".read-content.j_readContent p")
        # 写入标题
        with open(r'D:\Users\MSI-PC\Desktop\123.txt', encoding='utf8', mode='a+') as f:
            f.write(str(key) + '\n')
        # 由于起点是每句一个<p></p>加属性 i获得是属性,需要加text方法获得内容
        for i in text_w:
            with open(r'D:\Users\MSI-PC\Desktop\123.txt', encoding='utf8', mode='a+') as f:
                f.write(str(i.text) + '\n')


if __name__ == '__main__':
    namebook = input('请输入小说名称: ')
    load(namebook)

 

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
起点中文网是一个提供在线阅读小说的平台,但其中的VIP章节需要付费才能访问。尝试使用爬虫程序爬取VIP章节时,可能会遇到一些问题。根据引用,在爬取VIP章节时,花费了0.27大洋后发现爬取失败,这说明平台可能采取了一些反爬虫的措施。引用中提到了一种可能的反爬虫手段:服务器会验证用户是否已经付费,并根据结果返回相应的章节信息。如果用户没有付费,则可能只能获取到试读的信息。 要绕过起点中文网的VIP章节爬取限制,一种可行的方法是模拟用户登录并付费。首先,需要模拟发送一个登录请求,获取登录后的cookie等信息。然后,通过付费接口进行模拟付费操作,获取付费后的权限信息。最后,可以通过发送请求获取全部章节内容。但请注意,这种方法涉及模拟用户行为和支付操作,务必遵守平台的规定和法律法规。 另外,需要注意的是,尝试绕过平台的反爬虫措施可能违反平台的使用协议,甚至触犯法律。在进行任何爬取操作前,请务必确认自己的行为是否符合法律和道德的要求,并遵守平台的规定和服务条款。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python 爬取起点小说vip章节(失败)](https://blog.csdn.net/weixin_39786141/article/details/110827031)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值