<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          大寫牛逼,用 Python 登錄主流 24 個(gè)網(wǎng)站

          共 3529字,需瀏覽 8分鐘

           ·

          2020-11-17 01:10


          爬蟲腳本是大家經(jīng)常用到的,那就避開不了登錄?這一關(guān)。
          使用Python一般需要request庫(kù),補(bǔ)充 header 中的 post 要素,有些還會(huì)有 隱藏的 hidden 參數(shù),可以通過瀏覽器 F12 或者元素審查來發(fā)現(xiàn),對(duì)于初學(xué)者來說都是一個(gè)坑。
          還有需要解決驗(yàn)證碼的問題,一種方法是下載驗(yàn)證碼圖片識(shí)別驗(yàn)證碼再次post,或者使用云打碼平臺(tái)。當(dāng)然,有些驗(yàn)證碼及其變態(tài)就不那么容易解決了,比如選字順序、滑塊、12306那種人為都會(huì)選錯(cuò)的。
          本篇boy哥分享一個(gè)GitHub項(xiàng)目awesome-python-login-model》,主要就是利用Python解決登錄主流平臺(tái)的,包含24個(gè)主流平臺(tái),目前在GitHub上已經(jīng)表星11.8k了。
          Github鏈接:https://github.com/Kr1s77/awesome-python-login-model

          已完成的主流網(wǎng)站

          上面是作者已經(jīng)完成的一些主流網(wǎng)站了,其中有的是通過?selenium登錄,有的是通過?抓包直接模擬登錄,有的是利用 scrapy框架。
          這個(gè)很容易理解,因?yàn)橛械木W(wǎng)站設(shè)計(jì)比較復(fù)雜,通過抓包很難實(shí)現(xiàn)模擬登錄,這樣用 selenium+webdriver 就會(huì)相對(duì)輕松一些。
          雖然在登錄的時(shí)候采用的是selenium,為了效率,我們可以在登錄過后得到的cookie維護(hù)起來,然后調(diào)用requests或者scrapy等進(jìn)行數(shù)據(jù)采集,這樣數(shù)據(jù)采集的速度可以得到保證。

          模擬登錄GitHub

          這里boy哥給大家展示一個(gè)模擬登錄GitHub的代碼。
          """
          github第二種登錄方式
          info:
          author:CriseLYJ
          github:https://github.com/CriseLYJ/
          update_time:2019-3-7
          """


          import?re
          import?requests
          from?lxml?import?etree


          class?Login(object):
          class?GithubLogin(object):

          ????def?__init__(self,?email,?password):

          ????????#?初始化信息
          ????????self.headers?=?{
          ????????????'User-Agent':?'Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10_14_2)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/71.0.3578.98?Safari/537.36',
          ????????????'Referer':?'https://github.com/',
          ????????????'Host':?'github.com'
          ????????}

          ????????self.session?=?requests.Session()
          ????????self.login_url?=?'https://github.com/login'
          ????????self.post_url?=?'https://github.com/session'
          ????????self.session?=?requests.Session()

          ????????self.email?=?email
          ????????self.password?=?password
          ????#?模擬登錄
          ????def?login_GitHub(self):

          ????????#?登錄入口
          ????????post_data?=?{
          ????????????'commit':?'Sign?in',
          ????????????'utf8':?'?',
          ????????????'authenticity_token':?self.get_token(),
          ????????????'login':?self.email,
          ????????????'password':?self.password
          ????????}
          ????????resp?=?self.session.post(
          ????????????self.post_url,?data=post_data,?headers=self.headers)

          ????????print('StatusCode:',?resp.status_code)
          ????????if?resp.status_code?!=?200:
          ????????????print('Login?Fail')
          ????????match?=?re.search(r'"user-login"?content="(.*?)"',?resp.text)
          ????????user_name?=?match.group(1)
          ????????print('UserName:',?user_name)

          ????????response?=?self.session.post(self.post_url,?data=post_data,?headers=self.headers)

          ????????print(response.status_code)
          ????????print(post_data)

          ????????if?response.status_code?==?200:
          ????????????print("登錄成功!")
          ????????else:
          ????????????print("登錄失?。?)
          ????#?獲取token信息
          ????#?Get?login?token
          ????def?get_token(self):

          ????????response?=?self.session.get(self.login_url,?headers=self.headers)

          ????????html?=?etree.HTML(response.content.decode())

          ????????token?=?html.xpath('//input[@name="authenticity_token"]/@value')[0]

          ????????return?token
          ????????if?response.status_code?!=?200:
          ????????????print('Get?token?fail')
          ????????????return?None
          ????????match?=?re.search(
          ????????????r'name="authenticity_token"?value="(.*?)"',?response.text)
          ????????if?not?match:
          ????????????print('Get?Token?Fail')
          ????????????return?None
          ????????return?match.group(1)

          if?__name__?==?'__main__':
          ????email?=?input('請(qǐng)輸入您的賬號(hào):?')
          ????password?=?input('請(qǐng)輸入您的密碼:?')
          ????email?=?input('Account:')
          ????password?=?input('Password:')

          ????login?=?Login(email,?password)
          ????login?=?GithubLogin(email,?password)
          ????login.login_GitHub()
          相信這對(duì)初學(xué)爬蟲的朋友是一個(gè)很好的教程。
          但提示一下,模擬登錄的代碼隨時(shí)都有可能失效,因?yàn)?/span>前端的網(wǎng)頁(yè)HTML、CSS、JS等結(jié)構(gòu)可能會(huì)根據(jù)公司業(yè)務(wù)調(diào)整之類的發(fā)生變化。
          所以,重點(diǎn)是掌握了各種技巧,學(xué)會(huì)這些完全可以自己調(diào)試完成登錄,那時(shí)候你也可以成為 contributor 了!
          Github鏈接:https://github.com/Kr1s77/awesome-python-login-model

          PS公號(hào)內(nèi)回復(fù)「Python」即可進(jìn)入Python 新手學(xué)習(xí)交流群,一起?100 天計(jì)劃!


          老規(guī)矩,兄弟們還記得么,右下角的 “在看” 點(diǎn)一下如果感覺文章內(nèi)容不錯(cuò)的話,記得分享朋友圈讓更多的人知道!

          神秘禮包獲取方式

          識(shí)別文末二維碼,回復(fù):1024

          瀏覽 23
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美激情操逼片 | 日日碰狠狠添天天爽 | 国产精品久久久久久妇女6080 | 伊人网大香蕉在线 | 韩国精品无码 |