閒來無事,寫乙個模擬登入知乎的小demo。
分析網頁發現:登入需要的手機號,密碼,_xsrf引數,驗證碼
實現思路:
1、獲取驗證碼
2、獲取_xsrf 引數
3、攜帶引數,請求登入
驗證碼url : "".format(t=t) # t 為時間戳
登入介面url : ""
手機登入申請url : ''
實現**:
首先配置檔案 settings 中 robotstxt_obey = false
1、開頭及驗證碼處理部分,先重寫scrapy的start_requests方法。其次利用pillow 來處理驗證碼,將驗證碼顯示出來,手動填寫(畢竟打碼是需要費用的),知乎預設的驗證碼為中文,經分析發現驗證碼url 後面的 lang 引數決定語言,所以試著將語言改為英文(en)
#-*- coding: utf-8 -*-
import
scrapy
import
time
import
json
from pil import
image
class
zhihuspider(scrapy.spider):
name = '
zhihu
'allowed_domains = ['
www.zhihu.com']
#重寫start_requests方法,處理驗證碼問題
defstart_requests(self):
t = str(time.time()).replace('','.'
)
#驗證碼url
start_urls = "
".format(t=t)
self.header =
#請求驗證碼的url
return [scrapy.request(url=start_urls,headers=self.header,callback=self.capcha,dont_filter=true)]
#獲取驗證碼
defcapcha(self,response):
#獲取驗證碼,將驗證馬寫入本地
#利用pillow開啟驗證碼
請開啟檔案%s自行輸入
請輸入驗證碼》")
data =
log_url = "
"return scrapy.request(url=log_url,callback=self.parse_login,headers=self.header,meta=data,dont_filter=true)
2、得到驗證碼後,開始搞_xsrf引數,從登入原始碼中分析得到_xsrf 在屬性為name="_xsrf" 的input 節點中的value值
#解析申請登陸的頁面,獲取引數xsrf
defparse_login(self,response):
xsrf = response.xpath('
//input[@name="_xsrf"]/@value
').extract_first()
ifnot
xsrf:
print("
請求錯誤")
return
''phone_num = input("
請輸入手機號碼")
password = input("
請輸入密碼")
data =
#用手機號-密碼 登入的url
url = '
'return scrapy.formrequest(url=url,callback=self.login_zh,headers=self.header,formdata=data,dont_filter=true,meta=)
3、引數都獲取到後就可以模擬登入了
#驗證是否登入成功
deflogin_zh(self,response):
print(json.loads(response.text)['
msg'
]) url = "
"#請求登入知乎
yield scrapy.request(url=url,callback=self.zh,headers=self.header,dont_filter=true,meta=)
#後續解析知乎登入後的頁面
defzh(self,response):
print(response.text)
本次登入後,並未對頁面進行解析,只是列印一下頁面,作為驗證。
Scrapy模擬登入知乎
scrapy startproject zhihu login scrapy genspider zhihu www.zhihu.com coding utf 8 import scrapy class zhihuspider scrapy.spider name zhihu allowed dom...
Scrapy 登入知乎
需要先建立乙個scrapy專案,然後建立乙個testspider 按照需要修改items 然後開始修改testspider的內容,中都有注釋,不作贅述 coding utf 8 import scrapy import os import time mode 1 tencent 2 free mod...
模擬登入知乎 利用selenium接管瀏覽器
本文借鑑於 原理 我們使用selenium中的webdirver開啟的瀏覽器沒有瀏覽器記錄,也就是最純淨的瀏覽器,所以也不會攜帶cookie之類的資訊,但是我們使用selenium接管瀏覽器時,建立的瀏覽器時copy原來的瀏覽器配置檔案,瀏覽器記錄也會被copy,所以他會帶上cookie資訊 此次模...