python js2py和 selenium

js2py和 selenium

js2py

  • 簡(jiǎn)介

    • js2py是純python實(shí)現(xiàn)的庫(kù),用于在python中運(yùn)行js代碼,本質(zhì)上是將js代碼翻譯成python代碼
  • 用法

    • 在python中使用js函數(shù)

      • import js2py
        
        js_add = """
        function add(a,b){
            return a+b
        }
        """
        py_add = js2py.eval_js(js_add)
        print(py_add(1,2))
        # 變量="""js函數(shù)"""
        # 變量1 = js2py.eval_js(變量), 將js函數(shù)翻譯成python函數(shù)
        # 調(diào)用變量1
        js_var = """
        var a = 'hello world'
        """
        py_var = js2py.eval_js(js_var)
        print(py_var)
        
    • js代碼翻譯

      • import js2py
        print(js2py.translate_js("console.log('hello world')"))
        
        # 將js文件翻譯為Python腳本
        js2py.translate_file('test.js', 'test.py')
        

動(dòng)態(tài)html技術(shù)

  • 爬蟲(chóng)思路總結(jié)
    • 1 準(zhǔn)備目標(biāo)url
      • 頁(yè)碼總數(shù)明確,找到頁(yè)面的規(guī)律來(lái)獲取url
      • 頁(yè)碼總數(shù)不明確,如果url比較少可以放在列表中遍歷。通過(guò)xpath來(lái)提取頁(yè)碼
    • 2 向目標(biāo)的url發(fā)送請(qǐng)求
      • 隨機(jī)添加UA
      • 代理IP
      • 添加cookie
    • 3 提取數(shù)據(jù)
      • 確定數(shù)據(jù)位置
        • 數(shù)據(jù)在當(dāng)前的url當(dāng)中我們直接發(fā)起請(qǐng)求
        • 數(shù)據(jù)不在當(dāng)前url中
          • 通過(guò)network來(lái)分析數(shù)據(jù)
          • 通過(guò)search來(lái)查詢(xún)我們需要的數(shù)據(jù)
      • re,xpath,bs4
    • 4 保存數(shù)據(jù)
      • html,txt,csv
      • 數(shù)據(jù)庫(kù)mysql mongodb redis
  • 爬蟲(chóng)建議

    • 盡量減少請(qǐng)求次數(shù)

      • 保存獲取到的HTML,供查錯(cuò)和重復(fù)使用
    • 關(guān)注網(wǎng)站的所有類(lèi)型的頁(yè)面

      • H5頁(yè)面
      • APP
    • 多偽裝

      • 代理IP
      • 隨機(jī)請(qǐng)求頭
    • 利用多線程分布式

      • 在不被發(fā)現(xiàn)的情況下我們盡可能的提高速度
  • ajax基本介紹

    • 動(dòng)態(tài)了解HTML技術(shù)

      • JS

        • 是網(wǎng)絡(luò)上最常用的腳本語(yǔ)言,它可以收集用戶(hù)的跟蹤數(shù)據(jù),不需要重載頁(yè)面直接提交表單,在頁(yè)面嵌入多媒體文件,甚至運(yùn)行網(wǎng)頁(yè)
      • jQuery

        • jQuery是一個(gè)快速、簡(jiǎn)介的JavaScript框架,封裝了JavaScript常用的功能代碼
      • ajax

        • ajax可以使用網(wǎng)頁(yè)實(shí)現(xiàn)異步更新,可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新
    • 獲取ajax數(shù)據(jù)的方式

      1.直接分析ajax調(diào)用的接口。然后通過(guò)代碼請(qǐng)求這個(gè)接口。

      2.使用Selenium+chromedriver模擬瀏覽器行為獲取數(shù)據(jù)

      方式 優(yōu)點(diǎn) 缺點(diǎn)
      分析接口 直接可以請(qǐng)求到數(shù)據(jù)。不需要做一些解析工作。代碼量少,性能高 分析接口比較復(fù)雜,特別是一些通過(guò)js混淆的接口,要有一定的js功底。容易被發(fā)現(xiàn)是爬蟲(chóng)。
      selenium 直接模擬瀏覽器的行為。瀏覽器能請(qǐng)求到的,使用selenium也能請(qǐng)求到。爬蟲(chóng)更穩(wěn)定。 代碼量多。性能
  • Phantomjs快速入門(mén)

    • from selenium import webdriver
      import time
      driver = webdriver.PhantomJS()
      
      # 打開(kāi)網(wǎng)站
      driver.get('https://www.baidu.com/')
      # 定位操作和輸入內(nèi)容
      driver.find_element_by_id('kw').send_keys('中國(guó)')
      # 點(diǎn)擊搜索
      driver.find_element_by_id('su').click()
      
      # time.sleep(10)
      # 網(wǎng)站截屏
      # driver.save_screenshot('baidu.png')。
      
      # 查看請(qǐng)求的url地址
      print(driver.current_url)
      
      # 查看網(wǎng)頁(yè)源碼
      print(driver.page_source)
      
      
  • selenium快速入門(mén)

    • from selenium import webdriver
      import time
      driver = webdriver.Chrome()
      driver.get('https://www.baidu.com')
      driver.find_element_by_id('kw').send_keys('中國(guó)')
      driver.find_element_by_id('su').click()
      # 窗口最大化
      driver.maximize_window()
      # 窗口最小化
      driver.minimize_window()
      
      time.sleep(4)
      # 推出當(dāng)前窗口
      driver.close()
      # 推出瀏覽器
      time.sleep(2)
      driver.quit()
      
      
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容