Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))
1.?為什么需要模擬登陸?
? ? ?獲取cookie,能夠爬取登陸后的頁面的數據
2.使用cookie模擬登陸的場景
? ?(1) cookie過期時間很長,常見于一些不規范的網站
? ? (2)?能在cookie過期之前把搜有的數據拿到
? ? (3)?配合其他程序使用,比如其使用selenium把登陸之后的cookie獲取到,然后保存到本地,
? ? ? ? ?scrapy發送請求之前先讀取本地cookie
3. 在一個scrapy的項目創建好之后,爬蟲的py文件里面的start_urls = [] 里面的url地址是誰來請求的?
? ? ?可以點擊進入到Spider類中的源碼中,發現start_urls 列表中的url是由里面的start_resquests()方法執行的,方法里面又? ? ? ? 調用了?make_requests_from_url()??
? ???
4.?.重寫父類中start_requests()方法
? ? 設置cookies,把cookies的字符串形式轉化為字典的形式
? ?在yield scrapy.Request()中設置cookies參數
? ?默認在settings里面已經開啟了cookiess,下次請求時會帶上,上次請求的cookies
? ? 在settings里面設置 COOKIES_DEBUG = True 可以看見cookies在不同的請求里面傳遞的過程是怎樣的
? ? ?前提是不設置 LOG_LEVEL
5.? 利用cookie模擬登陸人人網
? ? 首先登陸進去人人網,把登陸進入之后的對應的cookie復制出來
? ? ?然后在項目的爬蟲文件中,進行邏輯代碼的編寫
# -*- coding: utf-8 -*- import scrapy import reclass RenrenSpider(scrapy.Spider):name = 'renren'allowed_domains = ['renren.com']start_urls = ['登陸人人網之后的網址']'''重寫父類的start_requests方法'''def start_requests(self):cookies = "自己登陸人人網之后的=cookie"'''轉化為字典的形式'''cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split("; ")}yield scrapy.Request(self.start_urls[0],callback=self.parse,cookies=cookies # 設置cookie參數)def parse(self, response):'''我們之匹配到和自己用戶名一樣的字符串,如果匹配到則說明已經匹配到的登錄之后的數據,模擬登陸就成功了'''print(re.findall("自己人人網的用戶名", response.body.decode()))yield scrapy.Request("登陸之后的個人信息網址",callback=self.parse_detial)def parse_detial(self, response):print(re.findall("自己人人網的用戶名", response.body.decode()))? 6. 然后我們運行程序之后,就可以看見,匹配到了登錄之后的自己人人網的用戶名?
?7. 我們還可以在scrapy.Request()? 里面設置headers參數
def start_requests(self):cookies = "自己登陸人人網之后的=cookie"'''轉化為字典的形式'''cookies = {i.split("=")[0]: i.split("=")[1] for i in cookies.split("; ")}'''設置headers參數,也可以加一些更多的請求頭'''headers = {"Cookie":cookies}yield scrapy.Request(self.start_urls[0],callback=self.parse,headers=headers # 設置headers參數)?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Scrapy框架的学习(10.Scrapy中的模拟登陆(使用cookie模拟登陆))的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrapy框架的学习(9.Scrapy
- 下一篇: Scrapy框架的学习(11.scrap