【爬虫实战】起点中文网小说的爬取

本文介绍了如何使用爬虫技术抓取起点中文网上的小说《大千界域》。首先解析HTML获取章节URL,但由于起点的反爬策略,常规方法无法获取章节内容。接着,通过分析网络请求,找到通过AJAX获取的JSON数据,从中提取卷ID,进而获取每个卷的章节链接,实现完整爬取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  首先打开起点中文网,网址为:https://www.qidian.com/

  本次实战目标是爬取一本名叫《大千界域》的小说,本次实战仅供交流学习,支持作者,请上起点中文网订阅观看。

 

  我们首先找到该小说的章节信息页面,网址为:https://book.qidian.com/info/3144877#Catalog

  

  点击检查,获取页面的html信息,我发现每一章都对应一个url链接,故我们只要得到本页面html信息,然后通过Beautifulsoup,re等工具,就可将所有章节的url全部得到存成一个url列表然后挨个访问便可获取到所有章节内容,本次爬虫也就大功告成了!

 

 

 

  按照我的想法,我用如下代码获取了页面html,并在后端输出显示,结果发现返回的html信息不全,包含章节链接的body标签没有被爬取到,就算补全了headers信息,还是无法获取到body标签里的内容,看来起点对反爬做的措施不错嘛,这条道走不通,咱们换一条。

import requests


def get():

    url = 'https://book.qidian.com/info/3144877#Catalog'

    req = requests.get(url)

    print(req.text)


if __name__ == '__main__':

    get()

       既然这个页面是动态加载的,故可能应用ajax与后端数据库进行了数据交互,然后渲染到了页面上,我们只需拦截这次交互请求,获取到交互的数据即可。

打开网页https://book.qidian.com/info/3144877#Catalog,再次右键点击检查即审查元素,因为是要找到数据交互,故点击network里的XHR请求,精确捕获XHR对象,我们发现一个url为https://book.qidian.com/ajax/book/category?_csrfToken=1iiVodIPe2qL9Z53jFDIcXlmVghqnB6jSwPP5XKF&bookId=3144877的请求返回的response是一个包含所有卷id和章节id的json对象,这就是我们要寻找的交互数据。

        通过如下代码,便可获取到该json对象

import requests

import random


def random_user_agent():

    list = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',

            'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML like Gecko) Chrome/44.0.2403.155 Safari/537.36',

            'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (
使用Scrapy爬取起点中文网的图片可以通过以下步骤实现: 1. **安装Scrapy**:首先,确保你的环境中已经安装了Scrapy。如果没有安装,可以使用pip进行安装: ```bash pip install scrapy ``` 2. **创建Scrapy项目**:在你的工作目录下创建一个新的Scrapy项目: ```bash scrapy startproject qidian_images ``` 3. **创建爬虫**:进入项目目录并创建一个新的爬虫: ```bash cd qidian_images scrapy genspider qidian_spider qidian.com ``` 4. **编写爬虫代码**:打开`qidian_spider.py`文件,编写爬虫代码。以下是一个示例代码,用于爬取起点中文网小说封面图片: ```python import scrapy from scrapy.http import Request class QidianSpiderSpider(scrapy.Spider): name = 'qidian_spider' allowed_domains = ['qidian.com'] start_urls = ['https://www.qidian.com/'] def parse(self, response): # 找到所有小说封面图片的URL image_urls = response.css('img.cover::attr(src)').getall() for image_url in image_urls: if image_url.startswith('//'): image_url = 'https:' + image_url yield Request(image_url, callback=self.save_image) def save_image(self, response): # 获取图片的URL image_url = response.url # 获取图片的二进制内容 image_content = response.body # 获取图片的文件名 image_name = image_url.split('/')[-1] # 保存图片到本地 with open(f'images/{image_name}', 'wb') as f: f.write(image_content) ``` 5. **运行爬虫**:在项目目录下运行爬虫,并指定输出目录: ```bash scrapy crawl qidian_spider -o images.json ``` 6. **保存图片**:为了将图片保存到本地,需要在`settings.py`文件中添加以下配置: ```python import os IMAGES_STORE = os.path.join(os.path.dirname(__file__), 'images') ``` 并在`settings.py`中启用图片下载中间件: ```python ITEM_PIPELINES = { 'scrapy.pipelines.images.ImagesPipeline': 1, } IMAGES_URLS_FIELD = 'image_urls' IMAGES_STORE = 'images' ``` 7. **启动爬虫**:确保你已经创建了`images`文件夹,然后启动爬虫: ```bash scrapy crawl qidian_spider ``` 通过以上步骤,你可以使用Scrapy爬取起点中文网的图片并保存到本地。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值