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

相关推荐
q567315232 分钟前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀3 分钟前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆4 分钟前
数据采集之selenium模拟登录
python·selenium·测试工具
零炻大礼包36 分钟前
【SQL server】数据库远程连接配置
数据库
狂奔solar38 分钟前
yelp数据集上识别潜在的热门商家
开发语言·python
Tassel_YUE40 分钟前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
zmgst1 小时前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
聪明的墨菲特i1 小时前
Python爬虫学习
爬虫·python·学习
随心............1 小时前
python操作MySQL以及SQL综合案例
数据库·mysql
€☞扫地僧☜€1 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器