什么爬取小说,很慢。来看一篇文章解决。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对象 ,然后保存的话 返回引擎,然后给管道

相关推荐
廿一夏9 小时前
MySql存储引擎与索引
数据库·sql·mysql
曲幽9 小时前
我用了FastApiAdmin后,连夜把踩过的坑都整理出来了
redis·python·postgresql·vue3·fastapi·web·sqlalchemy·admin·fastapiadmin
北京耐用通信10 小时前
全域适配工业场景耐达讯自动化Modbus TCP 转 PROFIBUS 网关轻松实现以太网与现场总线互通
网络·人工智能·网络协议·自动化·信息与通信
前端若水11 小时前
会话管理:创建、切换、删除对话历史
前端·人工智能·python·react.js
lzhdim11 小时前
SQL 入门 15:SQL 事务:从 ACID 到四种常见的并发问题
数据库·sql
瀚高PG实验室12 小时前
瀚高企业版V9.1.1在pg_restore还原备份文件时提示extract函数语法问题
数据库·瀚高数据库
涛声依旧-底层原理研究所12 小时前
残差连接与层归一化通俗易懂的详解
人工智能·python·神经网络·transformer
csdn_aspnet12 小时前
Python 算法快闪 LeetCode 编号 70 - 爬楼梯
python·算法·leetcode·职场和发展
TDengine (老段)12 小时前
TDengine Tag 设计哲学与 Schema 变更机制
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
fantasy_arch12 小时前
pytorch人脸匹配模型
人工智能·pytorch·python