石家莊信息網(wǎng)官方網(wǎng)站免費訪問國外網(wǎng)站的app
盡管現(xiàn)代的網(wǎng)站多采取前后端分離的方式進行開發(fā)了,但是對直接 API 的調(diào)用我們通常會有 token 的限制和可以調(diào)用頻率的限制。
因此,在一些特定的網(wǎng)站上,我們可能還是需要使用網(wǎng)絡(luò)爬蟲的方式獲得已經(jīng)返回的 JSON 數(shù)據(jù)結(jié)構(gòu),甚至是處理已經(jīng)完成界面展示的數(shù)據(jù)了。
Selenium
與BeautifulSoup和Scrapy相比,Selenium是一個不同的工具。
Selenium 并不是為網(wǎng)絡(luò)爬取而生的。它實際上是為網(wǎng)絡(luò)測試而開發(fā)的。Selenium被用于網(wǎng)絡(luò)應(yīng)用程序的自動化測試。
它使網(wǎng)絡(luò)瀏覽器自動化,你可以用它來代表你在瀏覽器環(huán)境中進行操作。然而,它后來也被納入了網(wǎng)絡(luò)爬取的范疇。Selenium可以發(fā)送網(wǎng)絡(luò)請求,還帶有一個分析器。通過Selenium,你可以從HTML文檔中提取數(shù)據(jù),就像你使用Javascript DOM API那樣。
Selenium的主要優(yōu)勢在于它能加載Javascript,并能幫助你訪問JavaScript背后的數(shù)據(jù),而不一定要自己經(jīng)歷發(fā)送額外請求的痛苦。這使得Selenium不僅對自己有用,而且對其他工具也有用。
使用Scrapy或BeautifulSoup 的網(wǎng)絡(luò)爬蟲如果需要只有在加載Javascript文件時才能獲得的數(shù)據(jù),就會使用Selenium。
Selenium 會啟動一個瀏覽器,同時在這個瀏覽器中進行操作的模擬。
同時 Selenium 還具有 HTML 的 DOM 分析能力,通過選擇器,你可以選擇需要的數(shù)據(jù)。
Scrapy
Scrapy是一個網(wǎng)絡(luò)抓取框架,它配備了大量的工具,使網(wǎng)絡(luò)抓取和爬取變得簡單。它在設(shè)計上是多線程的,并建立在Twisted之上。Twisted是一個異步網(wǎng)絡(luò)框架,遵循對服務(wù)器的非阻塞I/O調(diào)用。因為它是多線程和非阻塞的,所以它在性能方面實際上是最好的,實際上是3個工具中最快的。Scrapy比這三個工具的一個優(yōu)勢是,它帶有發(fā)送請求和解析響應(yīng)的模塊。
Scrapy 是開發(fā)復(fù)雜的網(wǎng)絡(luò)抓取和爬蟲工具,因為你可以創(chuàng)建大量的工作者,而且每個工作者都能毫不費力地工作。它的建立是為了消耗更少的內(nèi)存,并將CPU資源的使用降到最低。事實上,一些基準測試表明,Scrapy在抓取方面比其他工具快20倍。它是可移植的,而且其功能可以擴展。
與Scrapy相關(guān)的主要問題是,它不是一個以初學(xué)者為中心的工具。
Scrapy 的文檔比較難讀,學(xué)習(xí)曲線也比較陡峭,我不認為這個工具比較適合初學(xué)者來使用。
Scrapy的一個主要缺點是它不能渲染 JavaScript;你必須發(fā)送 Ajax 請求來獲取隱藏在JavaScript事件后面的數(shù)據(jù)。
這種情況對當前前后端分離的技術(shù)來說,還是有點麻煩的,我們必須要比較清楚的分析 AJAX 的數(shù)據(jù)請求。
BeautifulSoup
對應(yīng) Java 世界來說,Java 會有一個 JSoup。
一個針對 HTML 的 Dom 文件分析器和選擇器,BeautifulSoup 在Python 中做了同樣的工作。
通過讓你對 HTML 界面中的內(nèi)容進行分析和處理以便于能夠從中獲取數(shù)據(jù)。
比如說,如果界面中有表格,在表格中有數(shù)據(jù),我們需要獲取的就是表格中的數(shù)據(jù)的話,就可以使用 DOM 分析工具來進行分析。
總結(jié)
因最近我們在對爬蟲的使用進行研究,對上面 3 個框架都有了一些探討。
個人覺得比較簡單的還是 Selenium,同時 Selenium 也足夠強大,能夠滿足我們對一些小網(wǎng)站的爬蟲分析。
Python 網(wǎng)絡(luò)爬取的時候使用那種框架 - Python - iSharkFly