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

相关推荐
容器( ु⁎ᴗ_ᴗ⁎)ु.。oO6 分钟前
MySQL事务
数据库·mysql
蜡笔小新星6 分钟前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
篝火悟者21 分钟前
问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题
开发语言·python
hakesashou41 分钟前
python如何比较字符串
linux·开发语言·python
Elastic 中国社区官方博客1 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
_.Switch1 小时前
Python机器学习模型的部署与维护:版本管理、监控与更新策略
开发语言·人工智能·python·算法·机器学习
Hoper.J2 小时前
PyTorch 模型保存与加载的三种常用方式
人工智能·pytorch·python
cyt涛2 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
弱冠少年2 小时前
websockets库使用(基于Python)
开发语言·python·numpy
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite