首先没有保存到文件里,所以没有用到管道。
用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对象 ,然后保存的话 返回引擎,然后给管道