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

相关推荐
这个DBA有点耶14 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
用户83562907805114 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户83562907805114 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
这个DBA有点耶16 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技16 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend17 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence20 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
你好潘先生1 天前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师1 天前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码1 天前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python