什么爬取小说,很慢。来看一篇文章解决。Scrapy协程应用——登录和分页

首先没有保存到文件里,所以没有用到管道。

用Scrapy登录:

有两种方式,一种是在 "settings"里面激活,cookie和headers。

一种是在"spider"中写出cookie登录信息。

先来第一种:

在settings中加入这个

下面是spider中的代码:

python 复制代码
import scrapy
from urllib.parse import urljoin
from scrapy import Request

class MyloginSpider(scrapy.Spider):
    name = "mylogin"
    allowed_domains = ["17k.com"]
    start_urls = ["https://user.17k.com/ck/user/myInfo/103179081?bindInfo=1&appKey=2406394919"]

    def parse(self, resp,**kwargs):
        print(resp.json())#拿json 字典类型的样子

请求成功。

然后就是拿到,网页的url,信息,。然后灵活用Request( url ,callback= )

这个callback就是,你要想你发送请求之后,你要去干什么。也就是所说的回调函数。



下来是第二种方法,去登录:

是直接在爬虫里面写 cookie登录请求。

代码:

python 复制代码
from typing import Iterable

import scrapy
from urllib.parse import urljoin
from scrapy import Request

class MyloginSpider(scrapy.Spider):
    name = "mylogin"
    allowed_domains = ["17k.com"]
    start_urls = ["https://user.17k.com/ck/user/myInfo/103179081?bindInfo=1&appKey=2406394919"]


    def start_requests(self):
        #需要把字符串变成字典
        s = "GUID=c9e1f4a6-216a-434a-9bde-27ccb5ef549e; accessToken=nickname%3D%25E4%25B9%25A6%25E5%258F%258B813RsdC65%26avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F01%252F81%252F90%252F103179081.jpg-88x88%253Fv%253D1709181148000%26id%3D103179081%26e%3D1724733593%26s%3D7841771421915f29; c_channel=0; c_csc=web"
        dic={}
        #用分号去切
        for item in s.split(";"):
            item = item.strip()#去掉空格
            k,v = item.split("=",1)#等号去切   "1"切一次
            dic[k] = v
        yield  Request(self.start_urls[0],cookies=dic)

    def parse(self, resp,**kwargs):
        print(resp.json())#拿json 字典类型的样子
        yield Request(self.start_urls[0], dont_filter=True)

请求成功。这里是没有在"调度器"里面去重,是想看多次发送请求,是否成功。

思路:

首先写cookie的时候,不是直接写,在Response函数中,有个cookie参数。

要以字典的形式传入,也就是说,要将一大串字符,转换成字典形式。

python 复制代码
yield  Request(self.start_urls[0],cookies=dic)

这个是修改代码:(用一个字典去接收他)

python 复制代码
s = "GUID=c9e1f4a6-216a-434a-9bde-27ccb5ef549e; accessToken=nickname%3D%25E4%25B9%25A6%25E5%258F%258B813RsdC65%26avatarUrl%3Dhttps%253A%252F%252Fcdn.static.17k.com%252Fuser%252Favatar%252F01%252F81%252F90%252F103179081.jpg-88x88%253Fv%253D1709181148000%26id%3D103179081%26e%3D1724733593%26s%3D7841771421915f29; c_channel=0; c_csc=web"
        dic={}
        #用分号去切
        for item in s.split(";"):
            item = item.strip()#去掉空格
            k,v = item.split("=",1)#等号去切   "1"切一次
            dic[k] = v

1.用"split"切割,然后去掉空格,,然后再用等号去"split"然后存入字典。

在下面的yield中传入cookie,完成请求工作。



以上是两种请求工作,一个是在setting中的,一个是正常写的。注意形式。

其实这个思路就是,拿到url,然后在Response里发送请求,然后回调。然后走。要保存设置管道。




======================重点来了====================

关于携程的 小说爬取:(超快哦)用的是携程。

这个就是。用了协程,这个Scrapy就是协程。

代码:

python 复制代码
import time
from scrapy import Request
import scrapy


class FeileiSpider(scrapy.Spider):
    name = "feilei"
    allowed_domains = ["b.faloo.com"]
    start_urls = ["https://b.faloo.com/y_0_0_0_0_0_0_2.html"]

    def parse(self, resp ,**kwargs):

        # name = resp.xpath("//h1[@class='fontSize17andHei']/@title").extract()
        # for na in name:
        #     print(na)

        xiangqing = resp.xpath("//div[@class='TwoBox02_08']//a/@href").extract()
        for html in xiangqing:
            html = resp.urljoin(html)
            yield Request(html,callback=self.xiang)

        # hrefs = resp.xpath("//div[@class='pageliste_body']//a/@href")
        # for href in hrefs:
        #     href = href.extract()
        #     child_href = resp.urljoin(href)
        #     yield Request(child_href,callback=self.parse)
    def xiang (self,resp,**kwargs):
        context = resp.xpath('//div[@class="T-L-T-C-Box1"]//p').extract()
        print(context)

就是一直在找,一种值在回调,但是这个拿到详情页的是,重新搞了一个回调函数。

真的是这个回调函数,其实到头来就是拿到东西,然后回调,发送信息。

下面真重点!!!

1.从爬虫中拿到,url。然后给引擎,然后拿到调度器,然后调度器返回 response对象,(其实看有没有重复等,做处理),然后引擎给下载器,在下载器封装成,response对象。然后给引擎,在爬虫中获得 yield对象 ,然后保存的话 返回引擎,然后给管道

相关推荐
llwszx4 分钟前
【Java/Go后端手撸原生Agent(第九篇):Plan-and-Execute规划模式——从“走一步看一步“到“先谋后动“】
java·python·golang·agent开发·plan模式·规划执行模式
lxw184491251416 分钟前
Python uv 完整使用教程
python·conda·pip·uv
hangyuekejiGEO23 分钟前
临沂GEO技术解析与行业应用方案
人工智能·python
霸道流氓气质26 分钟前
SpringBoot中基于 AES-GCM + KMS 密钥管理的数据加解密 Starter 实践
java·数据库·spring boot
三言老师1 小时前
CentOS7.9:Redis服务器部署结构化实战教程
linux·运维·服务器·数据库
番茄炒鸡蛋加糖1 小时前
MySQL 实战调优& 分表基础
数据库·mysql
Database_Cool_1 小时前
云数据库如何保证高可用、故障了怎么办:阿里云 RDS MySQL 高可用架构详解
数据库·mysql·阿里云
不做Java程序猿好多年2 小时前
Java中 String、StringBuffer、StringBuilder 的区别详解
开发语言·python
金銀銅鐵2 小时前
[Python] 用 turtle 来绘制国际象棋棋盘(不含棋子)
python·游戏
中微极客2 小时前
Veo视频生成与Gemini Agent平台集成实践
数据库·人工智能·oracle·音视频