[英]Selenium versus BeautifulSoup for web scraping
我正在使用 Python 從網站上抓取內容。 首先,我在 Python 上使用BeautifulSoup
和Mechanize
,但我看到該網站有一個通過 JavaScript 創建內容的按鈕,所以我決定使用Selenium
。
鑒於我可以使用 Selenium 和driver.find_element_by_xpath
類的方法找到元素並獲取它們的內容,那么當我可以將 Selenium 用於所有事情時,有什么理由使用BeautifulSoup
?
在這種特殊情況下,我需要使用 Selenium 來單擊 JavaScript 按鈕,那么使用 Selenium 來解析更好還是應該同時使用 Selenium 和 Beautiful Soup?
在直接回答您的問題之前,值得先說一下:如果您需要做的只是從靜態 HTML 頁面中提取lxml
,您可能應該使用urllib.request
lxml或BeautifulSoup
,而不是 Selenium (盡管 Selenium 可能也足夠了)。 不需要不必要地使用 Selenium 的優點:
requests
時設置簡單的異常重試邏輯更令人惱火。請注意,需要 cookie 才能運行的站點並不是破壞 Selenium 的理由 - 您可以輕松創建一個 URL 打開函數,該函數使用cookielib / cookiejar神奇地設置和發送帶有 HTTP 請求的 cookie。
好的,那你為什么要考慮使用 Selenium? 幾乎完全可以處理您要抓取的內容通過 JavaScript 添加到頁面的情況,而不是烘焙到 HTML 中。 即使這樣,您也可以在不破壞重型機器的情況下獲得所需的數據。 通常這些情況之一適用:
如果您確實認為自己的情況值得使用 Selenium,請在無頭模式下使用它,(至少)Firefox 和 Chrome 驅動程序支持這種模式。 Web 爬蟲通常不需要實際以圖形方式呈現頁面,或使用任何特定於瀏覽器的怪癖或功能,因此無頭瀏覽器 - 具有較低的 CPU 和內存成本以及較少的崩潰或掛起的移動部件 - 是理想的。
我建議將 Selenium 用於諸如與網頁交互之類的事情,無論是在成熟的瀏覽器中,還是在無頭模式的瀏覽器中,例如無頭 Chrome。 我還想說,漂亮的湯更適合觀察和編寫依賴於是否找到元素或找到了什么的語句,然后如果用戶願意,可以使用 selenium 執行與頁面的交互任務。
我使用 Selenium 進行網頁抓取,但這不是一個令人滿意的解決方案。 在我的上一個項目中,我使用了https://github.com/chromedp/chromedp 。 它是比 Selenium 更簡單的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.