亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

scrapy模擬登錄代碼

發布時間:2021-02-22 17:12:09 來源:億速云 閱讀:248 作者:戴恩恩 欄目:開發技術

本文章向大家介紹scrapy模擬登錄代碼,主要包括{**}的使用實例,應用技巧,基本知識點總結和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下。

在Scrapy中,模擬登陸網站一般有如下兩種實現方式:

           (1) 請求時攜帶Cookies

           (2) 發送Post請求獲取Cookies

請求時攜帶Cookies

對于一些Cookies過期時間很長的不規范網站,如果我們能夠在Cookies過期之前爬取到所有我們想要的數據,可以考慮在請求時直接將Cookies信息帶上來模擬用戶登錄。

以下是模擬登錄Github的示例代碼:

# -*- coding: utf-8 -*-
import scrapy
import re
 
class TmallLoginSpider(scrapy.Spider):
  name = 'github_login3'
  allowed_domains = ['github.com']
  start_urls = ['https://github.com/']
 
  def start_requests(self): # 請求時攜帶Cookies
    cookies = '_ga=GA1.2.363045452.1554860671; tz=Asia%2FShanghai; _octo=GH1.1.1405577398.1554860677; _device_id=ee3ff12512668a1f9dc6fb33e388ea20; ignored_unsupported_browser_notice=false; has_recent_activity=1; user_session=5oxrsfsZCor1iJFCgRXXyeAXd8hcmzEUGh70-xHWLjQkT62Q; __Host-user_session_same_site=5oxrsfsZCor1iJFCgRXXyeAXd8hcmzEUGh70-xHWLjQkT62Q; logged_in=yes; dotcom_user=pengjunlee; _gat=1'
    cookies = {i.split('=')[0]: i.split('=')[1] for i in cookies.split('; ')}
    yield scrapy.Request(self.start_urls[0], cookies=cookies)
    
  def parse(self, response): # 驗證是否請求成功
    print(re.findall('Learn Git and GitHub without any code!',response.body.decode()))

執行爬蟲后,后臺部分日志截圖如下:

scrapy模擬登錄代碼

發送Post請求模擬登錄

Scrapy還提供了兩種通過發送Post請求來獲取Cookies的方法。

scrapy.FormRequest()

使用scrapy.FormRequest()發送Post請求實現模擬登陸,需要人為找出登錄請求的地址以及構造出登錄時所需的請求數據。

使用scrapy.FormRequest()模擬登錄Github的示例代碼: 

# -*- coding: utf-8 -*-
import scrapy
import re
 
class GithubLoginSpider(scrapy.Spider):
  name = 'github_login'
  allowed_domains = ['github.com']
  start_urls = ['https://github.com/login']
 
  def parse(self, response): # 發送Post請求獲取Cookies
    authenticity_token = response.xpath('//input[@name="authenticity_token"]/@value').extract_first()
    utf8 = response.xpath('//input[@name="utf8"]/@value').extract_first()
    commit = response.xpath('//input[@name="commit"]/@value').extract_first()
    form_data = {
      'login': 'pengjunlee@163.com',
      'password': '123456',
      'webauthn-support': 'supported',
      'authenticity_token': authenticity_token,
      'utf8': utf8,
      'commit': commit}
    yield scrapy.FormRequest("https://github.com/session", formdata=form_data, callback=self.after_login)
 
  def after_login(self, response): # 驗證是否請求成功
    print(re.findall('Learn Git and GitHub without any code!', response.body.decode()))

從后臺日志不難看出,Scrapy 在請求完 https://github.com/session 后,自動幫我們重定向到了Github首頁。

scrapy模擬登錄代碼

scrapy.FormRequest.from_response()

scrapy.FormRequest.from_response()使用起來比 scrapy.FormRequest()更加簡單方便,我們通常只需要提供用戶相關信息(賬戶和密碼)即可,scrapy.FormRequest.from_response()將通過模擬點擊為我們填充好其他的表單字段并提交表單。

使用scrapy.FormRequest.from_response()模擬登錄Github的示例代碼: 

# -*- coding: utf-8 -*-
import scrapy
import re
 
class GithubLogin2Spider(scrapy.Spider):
  name = 'github_login2'
  allowed_domains = ['github.com']
  start_urls = ['https://github.com/login']
 
  def parse(self, response): # 發送Post請求獲取Cookies
    form_data = {
      'login': 'pengjunlee@163.com',
      'password': '123456'
    }
    yield scrapy.FormRequest.from_response(response,formdata=form_data,callback=self.after_login)
 
  def after_login(self,response): # 驗證是否請求成功
    print(re.findall('Learn Git and GitHub without any code!',response.body.decode()))

scrapy.FormRequest.from_response()方法還可以傳入其他參數來幫我們更加精確的指定表單元素:

'''
response (Response object) – 包含表單HTML的響應,將用來對表單的字段進行預填充
formname (string) – 如果設置了該值,name 等于該值的表單將被使用
formid (string) – 如果設置了該值,id 等于該值的表單將被使用
formxpath (string) – 如果設置了該值,匹配該 xpath 的第一個表單將被使用
formcss (string) – 如果設置了該值,匹配該 css選擇器的第一個表單將被使用
formnumber (integer) – 索引值等于該值的表單將被使用,默認第一個(索引值為 0 )
formdata (dict) – 傳入的表單數據,將覆蓋form 元素中已經存在的值
clickdata (dict) – 用于查找可點擊控件的屬性值
dont_click (boolean) – 如果設置為 True,將不點擊任何元素,直接提交表單數據
'''

以上就是小編為大家帶來的scrapy模擬登錄代碼的全部內容了,希望大家多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

弋阳县| 冀州市| 文水县| 加查县| 神池县| 夏邑县| 故城县| 元谋县| 砀山县| 南投县| 正阳县| 晋中市| 双峰县| 饶阳县| 宁化县| 元阳县| 孟村| 南昌县| 清水县| 明光市| 安多县| 巢湖市| 赣榆县| 来宾市| 贵州省| 绥江县| 青川县| 简阳市| 金堂县| 张掖市| 红河县| 涡阳县| 房山区| 南部县| 涟水县| 洛扎县| 桐乡市| 固始县| 金塔县| 辽中县| 镇巴县|