91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python爬蟲 Pyppeteer使用方法解析

發布時間:2020-09-15 22:29:24 來源:腳本之家 閱讀:193 作者:陪伴is最長情的告白 欄目:開發技術

引言

Selenium 在被使用的時候有個麻煩事,就是環境的相關配置,得安裝好相關瀏覽器,比如 Chrome、Firefox 等等,然后還要到官方網站去下載對應的驅動,最重要的還需要安裝對應的 Python Selenium 庫,確實是不是很方便,另外如果要做大規模部署的話,環境配置的一些問題也是個頭疼的事情。那么本節就介紹另一個類似的替代品,叫做 Pyppeteer。

Pyppeteer簡介

注意,本節講解的模塊叫做 Pyppeteer,不是 Puppeteer。Puppeteer 是 Google 基于 Node.js 開發的一個工具,有了它我們可以通過 JavaScript 來控制 Chrome 瀏覽器的一些操作,當然也可以用作網絡爬蟲上,其 API 極其完善,功能非常強大。 而 Pyppeteer 又是什么呢?它實際上是 Puppeteer 的 Python 版本的實現,但他不是 Google 開發的,是一位來自于日本的工程師依據 Puppeteer 的一些功能開發出來的非官方版本。

在 Pyppetter 中,實際上它背后也是有一個類似 Chrome 瀏覽器的 Chromium 瀏覽器在執行一些動作進行網頁渲染,首先說下 Chrome 瀏覽器和 Chromium 瀏覽器的淵源。

Chromium 是谷歌為了研發 Chrome 而啟動的項目,是完全開源的。二者基于相同的源代碼構建,Chrome 所有的新功能都會先在 Chromium 上實現,待驗證穩定后才會移植,因此 Chromium 的版本更新頻率更高,也會包含很多新的功能,但作為一款獨立的瀏覽器,Chromium 的用戶群體要小眾得多。兩款瀏覽器“同根同源”,它們有著同樣的 Logo,但配色不同,Chrome 由藍紅綠黃四種顏色組成,而 Chromium 由不同深度的藍色構成。

Pyppeteer 就是依賴于 Chromium 這個瀏覽器來運行的。那么有了 Pyppeteer 之后,我們就可以免去那些繁瑣的環境配置等問題。如果第一次運行的時候,Chromium 瀏覽器沒有安裝,那么程序會幫我們自動安裝和配置,就免去了繁瑣的環境配置等工作。另外 Pyppeteer 是基于 Python 的新特性 async 實現的,所以它的一些執行也支持異步操作,效率相對于 Selenium 來說也提高了。

環境安裝

由于 Pyppeteer 采用了 Python 的 async 機制,所以其運行要求的 Python 版本為 3.5 及以上

pip install pyppeteer

快速上手

- 爬取http://quotes.toscrape.com/js/ 全部頁面數據

import asyncio
from pyppeteer import launch
from lxml import etree
 
async def main():
browser = await launch()
page = await browser.newPage()
await page.goto('http://quotes.toscrape.com/js/')
page_text = await page.content()
tree = etree.HTML(page_text)
div_list = tree.xpath('//div[@class="quote"]')
print(len(div_list))
await browser.close()
 
asyncio.get_event_loop().run_until_complete(main())

結合協程

from pyppeteer import launch
import asyncio
from lxml import etree

# 實例化瀏覽器對象(谷歌測試版)
async def main():
  bro = await launch()
  # 新建一個空白頁
  page = bro.newPage()
  page.goto('http://quotes.toscrape.com/js/')

  # 獲取page當前顯示頁面的源碼數據
  page_text = await page.content()

  return page_text

def parse(task):
  page_text = task.result()
  tree = etree.HTML(page_text)
  div_list = tree.xpath('//div[@class="quote"]')
  for div in div_list:
    content = div.xpath('./span[1]/text()')
    print(content)

c = main()
task = asyncio.ensure_future(c)
task.add_done_callback(parse)
loop = asyncio.get_event_loop()
loop.run_until_complete(c)

解釋:

launch 方法會新建一個 Browser 對象,然后賦值給 browser,然后調用 newPage 方法相當于瀏覽器中新建了一個選項卡,同時新建了一個 Page 對象。然后 Page 對象調用了 goto 方法就相當于在瀏覽器中輸入了這個 URL,瀏覽器跳轉到了對應的頁面進行加載,加載完成之后再調用 content 方法,返回當前瀏覽器頁面的源代碼。

然后進一步地,我們用 pyquery 進行同樣地解析,就可以得到 JavaScript 渲染的結果了。在這個過程中,我們沒有配置 Chrome 瀏覽器,沒有配置瀏覽器驅動,免去了一些繁瑣的步驟,同樣達到了 Selenium 的效果,還實現了異步抓取。

詳細用法

  • 開啟瀏覽器
  • 調用 launch 方法即可,相關參數介紹:
    • ignoreHTTPSErrors (bool): 是否要忽略 HTTPS 的錯誤,默認是 False。
    • headless (bool): 是否啟用 Headless 模式,即無界面模式,如果 devtools 這個參數是 True 的話,那么該參數就會被設置為 False,否則為 True,即默認是開啟無界面模式的。
    • executablePath (str): 可執行文件的路徑,如果指定之后就不需要使用默認的 Chromium 了,可以指定為已有的 Chrome 或 Chromium。
    • args (List[str]): 在執行過程中可以傳入的額外參數。
    • devtools (bool): 是否為每一個頁面自動開啟調試工具,默認是 False。如果這個參數設置為 True,那么 headless 參數就會無效,會被強制設置為 False。
  • 關閉提示條:”Chrome 正受到自動測試軟件的控制”,這個提示條有點煩,那咋關閉呢?這時候就需要用到 args 參數了,禁用操作如下:
    • browser = await launch(headless=False, args=['--disable-infobars'])

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漳州市| 晴隆县| 浠水县| 策勒县| 通道| 仙游县| 昔阳县| 永靖县| 平度市| 斗六市| 利川市| 房产| 万年县| 武山县| 汝阳县| 蒲江县| 灵台县| 佛教| 尚义县| 鞍山市| 通化市| 原阳县| 潼南县| 道孚县| 桑植县| 东源县| 东方市| 晋江市| 海淀区| 嵩明县| 蒙山县| 固安县| 名山县| 如皋市| 拉孜县| 新泰市| 同心县| 枝江市| 子洲县| 监利县| 巴楚县|