爬去起点中文网小说

爬取《起点》中文网 免费小说

前言: 第一次写这么复杂的程序,欢迎各位大佬批评指正。。

  1. 去分析《起点》中文网的响应数据 (https://www.qidian.com/free/all)
    第一步,检查网页的response响应,通过打开NETwork发现起点中文网的有Referer反爬,
    在这里插入图片描述
    2.通过调试和分析数据 发现我们要的数据是嵌套在html里面的,我们利用xpath提取出我们想的每一部小说的url 和名字

在这里插入图片描述
在这里插入图片描述
3.我们拿到了 每一页中的所有的小说url 下一步就是提取小说的入口 通过分析得知 小说的入口也是嵌套html里面的
在这里插入图片描述
4.分析小说文本的数据
在这里插入图片描述

import requests
from lxml import etree
from fake_useragent import FakeUserAgent

if name == ‘main’:
for i in range(int(input(‘输入爬取的页说(一页是二十本小说)>>>>>>:’))):
# 确定目标的url——
url_ = f’https://www.qidian.com/free/all?orderId=&vip=hidden&style=1&pageSize=20&siteid=1&pubflag=0&hiddenField=1&page={i + 1}’
# 构造身user身份
user = FakeUserAgent().random
headers_ = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36’,
‘Cooie’: ‘e1=%7B%22pid%22%3A%22qd_P_free%22%2C%22eid%22%3A%22qd_C44%22%7D; e2=%7B%22pid%22%3A%22qd_P_free%22%2C%22eid%22%3A%22qd_C44%22%7D; csrfToken=Bf8rW9wM2hTvLVvBKEeorxq58HVuMaROuzWo9N2E; newstatisticUUID=1610114709_606719731; yep_uuid=325a69ff-672a-68c2-ed48-6e113af5cb65; qdrs=0%7C3%7C0%7C0%7C1; showSectionCommentGuide=1; qdgd=1; e1=%7B%22pid%22%3A%22qd_P_limitfree%22%2C%22eid%22%3A%22qd_E01%22%2C%22l1%22%3A4%7D; e2=%7B%22pid%22%3A%22qd_P_limitfree%22%2C%22eid%22%3A%22qd_A18%22%2C%22l1%22%3A3%7D; bc=1021516016%2C1017918245%2C1025325411%2C1024892080; lrbc=1025325411%7C625665811%7C0%2C1024892080%7C613857996%7C0%2C1021516016%7C630782911%7C1; rcr=1025325411%2C1024892080%2C1017918245%2C1021516016’,
‘Referer’: ‘https://book.qidian.com/’
}
# 发送请求得到响应
res
= requests.get(url
, headers=headers_).text
data_ = etree.HTML(res_)
# 提取每一本小说对应的url
url_list = data_.xpath(’//div[@class=“book-mid-info”]/h4/a/@href’)
a = []
for k in url_list:
j = ‘http:’ + k
a.append(j)

    b = []
    for p in a:
        res_1 = requests.get(url=p, headers=headers_).text
        data = etree.HTML(res_1)
        name1 = 'http:' + data.xpath('//div[@class="book-img"]/a/@href')[0]
        b.append(name1)
    print(b)
    # 给每一本对应的小说的url 发送请求 然后一次下载小说
    for l_3 in b:
       
        # 发送网络请求
        response_ = requests.get(url=l_3, headers=headers_).text
        # print(response_)
        # 转换xpath格式 提取数据
        data_1 = etree.HTML(response_)
        # 小说《名字》
        name_ = data_1.xpath('//div[@class="crumbs-nav"]/a[@class="act"]/text()')[0]
        print(name_)
        # 对应章节标题
        res_1 = data_1.xpath('//h3/span[@class="content-wrap"]/text()')[0]
        # print(res_)
        # 提取小说内容
        res_data = '\n'.join(data_1.xpath('//div[@class="read-content j_readContent"]/p/text()'))
        # print(res_data)
        # 提取下一章的url
        url_list1 = 'http:' + data_1.xpath('//div[@class="text-wrap"]/@data-nurl')[0]
        print(url_list1)
        with open(f'{name_}.txt', 'a', encoding='utf-8')as f:
            f.write(f'{res_1}\n')
            f.write(res_data)
            print(f'[{name_}]章节>>>【{res_1}】下载完毕')
        try:
            #  同过提取下一章的url 把它放在一个死循环里。依次写入
            while True:
                res_2 = requests.get(url=url_list1, headers=headers_).text

                # 文章标题
                res_two = etree.HTML(res_2)
                res_hea = res_two.xpath('//h3/span[@class="content-wrap"]/text()')[0]
                # 文 章内容

                res_two_data = '\n'.join(res_two.xpath('//div[@class="read-content j_readContent"]/p/text()'))
                #  判断文章的内容是否为空  如果为空的话就结束死循环
                if not res_two_data:
                    break
                # 下一章的url_会依次传入到73的get请求  来到达循环下载
                url_list1 = 'https:' + res_two.xpath('//div[@class="text-wrap"]/@data-nurl')[0]
                f = open(f'{name_}.txt', 'a', encoding='utf-8')
                f.write(f'{res_hea}\n')
                f.write(f'{res_two_data}')
                print(f'[{name_}]章节[{res_hea}]下载完毕')
        except:
            print(f'{name_}所有章节下载完成>>>>>>>>>>>>!!!!!')
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值