1、requests模塊。直接攜帶cookies請求頁面。
找到url,發送post請求存儲cookie。
2、selenium(瀏覽器自動處理cookie)。
找到相應的input標簽,輸入文本,點擊登錄。
3、scrapy直接帶cookies。
找到url,發送post請求存儲cookie。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# -*- 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 = { '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())) |
知識點擴展:
parse_login方法是提交完表單后callback回調函數指定要執行的方法,為了驗證是否成功。這里我們直接在response中搜索Welcome Liu這個字眼就證明登錄成功。
這個好理解,重點是yield from super().start_resquests(),這個代表著如果一旦登錄成功后,就直接帶著登錄成功后Cookie值,方法start_urls里面的地址。
這樣的話登錄成功后的response可以直接在parse里面寫。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# -*- coding: utf-8 -*- import scrapy from scrapy import FormRequest,Request class ExampleLoginSpider(scrapy.Spider): name = "login_" allowed_domains = [ "example.webscraping.com" ] start_urls = [ 'http://example.webscraping.com/user/profile' ] login_url = 'http://example.webscraping.com/places/default/user/login' def parse( self , response): print (response.text) def start_requests( self ): yield scrapy.Request( self .login_url,callback = self .login) def login( self ,response): formdata = { yield FormRequest.from_response(response,formdata = formdata, callback = self .parse_login) def parse_login( self ,response): # print('>>>>>>>>'+response.text) if 'Welcome Liu' in response.text: yield from super ().start_requests() |
到此這篇關于python scrapy簡單模擬登錄的代碼分析的文章就介紹到這了,更多相關python scrapy模擬登錄的方法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.py.cn/jishu/jichu/31614.html