<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>

          反爬篇 | 手把手教你處理 JS 逆向之圖片偽裝

          共 3744字,需瀏覽 8分鐘

           ·

          2022-05-20 16:20

          大家好,我是安果!

          最近打算更新反爬系列相關(guān)的內(nèi)容,第一篇就從最簡單的「 圖片偽裝 」開始吧

          圖片偽裝是在網(wǎng)頁元素中,將文字、圖片混合在一起進行展示,以此限制爬蟲程序直接獲取網(wǎng)頁內(nèi)容

          目標對象:

          aHR0cHM6Ly93d3cuZ3hyYy5jb20vam9iRGV0YWlsL2Q2NmExNjQxNzc2MjRlNzA4MzU5NWIzMjI1ZWJjMTBi

          1 - 分析

          打開頁面,分析頁面發(fā)現(xiàn)網(wǎng)頁源碼中的電話號碼默認是隱藏保護的

          并且要查看電話號碼,必須先通過賬號進行登錄操作

          完成登錄后,點擊頁面上的查看按鈕會調(diào)用一個接口,隨后電話號碼就完全展示出來了

          https://**/getentcontacts/b2147f6a-6ec7-403e-a836-62978992841b

          PS:該 URL 地址中 b2147f6a-6ec7-403e-a836-62978992841b 在網(wǎng)頁源碼中可以獲取,與企業(yè)一一對應(yīng)

          通過下圖,我們發(fā)現(xiàn)上面接口響應(yīng)值中的「 tel 」字段可以拼接成一張圖片,該圖片中的內(nèi)容與電話號碼一致

          因此,我們只需要下載這張圖片,利用 OCR 進行識別即可以

          2 - 實現(xiàn)

          由于該網(wǎng)站上的文字圖片背景很干凈,因此不需要額外的訓(xùn)練來提升文字識別率

          首先,我們調(diào)用接口獲取電話號碼一一對應(yīng)的 tel 字段

          import requests

          headers = {
              'User-Agent''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36',
              'Cookie''***'
          }

          # 獲取手機號碼對應(yīng)的tel字段id(一一對應(yīng))
          def get_tel_id():
              # b2147f6a-6ec7-403e-a836-62978992841b對應(yīng)企業(yè),也是一一對應(yīng)關(guān)系(網(wǎng)頁源碼)
              url = "https://**/getentcontacts/b2147f6a-6ec7-403e-a836-62978992841b"

              payload = {}

              resp = requests.request("GET", url, headers=headers, data=payload).json()
              tel_id = resp.get("tel")
              return tel_id

          然后,利用上面的 tel 字段組成圖片 URL 地址

          最后,就可以對圖片進行文字識別了

          這里介紹 2 種方式:

          • 百度 OCR

          • pytesseract

          2-1  百度 OCR

          首先,安裝依賴包

          # 安裝依賴包
          pip3 install baidu-aip

          然后,創(chuàng)建一個用于文字識別的應(yīng)用,獲取應(yīng)用的 APP_ID、API_KEY、SECRET_KEY 數(shù)據(jù)

          最后,參考官方文檔調(diào)用下面的方法識別圖片,獲取手機號碼數(shù)據(jù)

          官網(wǎng)文檔:

          https://cloud.baidu.com/doc/OCR/s/wkibizyjk

          from aip import AipOcr

          def get_phone(tel_id):
              """
              百度OCR識別圖片,獲取文字內(nèi)容
              :param tel_id:
              :return:
              """

              url = f'https://www.**.com/home/Phone/{tel_id}'
              APP_ID = '262**'
              API_KEY = '1btP8uUSzfDbji**'
              SECRET_KEY = 'NGm6NgAM5ajHcksKs0**'
              client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
              result = client.basicGeneralUrl(url)
              # {'words_result': [{'words': '0771-672**'}], 'words_result_num': 1, 'log_id': 1527210***}
              print('識別到的手機號碼為:', result)

          2-2 pytesseract

          同樣,我們需要先安裝文字識別、圖片處理的依賴包

          # 安裝依賴包
          pip3 install pillow
          pip3 install pytesseract

          然后,根據(jù)圖片 URL 地址獲取圖片字節(jié)流,最后利用 pytesseract 識別圖片中文字即可

          import io
          import pytesseract
          import requests
          from PIL import Image

          if __name__ == '__main__':
              # 獲取手機號碼的URL地址
              image_url = f'https://www.**.com/home/Phone/{get_tel_id()}'

              resp = requests.get(image_url, headers=headers)

              # images.content: 獲取圖片的二進制字節(jié)流
              # io.BytesIO(): 操作處理二進制數(shù)據(jù)
              # Image.open(): 打開圖片字節(jié)流,得到一個圖片對象
              images_c = Image.open(io.BytesIO(resp.content))

              # 利用pytesseract識別出圖片中的字符串,即為手機號碼
              phone = pytesseract.image_to_string(images_c)

              print(f'聯(lián)系方式: {phone}')

          以上就是應(yīng)用圖片偽裝常規(guī)的處理方式,我們只需要找出圖片的生成規(guī)則,然后利用 OCR 進行識別成文本,最后組裝在一起即可

          如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強動力!


          推薦閱讀


          用 Python 遠程控制 Windows 服務(wù)器,太好用了!

          JavaScript 逆向爬蟲中的瀏覽器調(diào)試常見技巧

          JavaScript 逆向爬蟲中的瀏覽器調(diào)試常見技巧(下)


          END


          好文和朋友一起看~
          瀏覽 133
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产又大又黄的视频 | 黄色美女特极A毛片 | 日本一道本高清在线一区二区 | 亚洲不卡视频 | 青春草在线免费视频 |