導航:首頁 > 編程語言 > phantomjs網路爬蟲

phantomjs網路爬蟲

發布時間:2023-04-30 01:28:17

❶ 現在用node寫網頁爬蟲用phantomjs和jsdom各有什麼利弊

phantomjs實際上就是一個瀏覽器,只是不顯示界面,可以執行頁面的js腳本等。
jsdom主要是方便解析html文本,相當於對字元串進行分析。

phantomjs對資源的要求和消耗都比較大,如果需要的內容從網頁源代碼中可以解析出來,推薦用jsdom,如果頁面復雜,推薦用phantomjs

❷ Python+Selenium+PhantomJs爬蟲 怎麼抓取彈出新標簽頁的內容

在工程中新建一個Python Package(包),右鍵點擊src, New>PydevPackage,選擇源文件路徑及輸入包名: 在_init_.py,輸入print (「Hello World」),按F9即可看到輸出結果,說明開發環境安裝成功!

❸ 爬蟲框架都有什麼

設計框架的目的就是將爬蟲流程統一化,將通用的功能進行抽象,減少重復工作。設計網路爬蟲框架需要哪些組件呢?下面ipidea全球IP為大家介紹一下。

爬蟲框架要處理很多的URL,我們需要設計一個隊列存儲所有要處理的 URL,這種先進先出的數據結構非常符合這個需求。 將所有要下載的URL存儲在待處理隊列中,每次下載會取出一個,隊列中就會少一個。我們知道有些URL的下載會有反爬蟲策略,所以針對這些請求需要做一些特殊的設置,進而可以對URL進行封裝抽出 Request。

頁面下載器如果沒有,用戶就要編寫網路請求的處理代碼,這無疑對每個 URL 都是相同的動作。 所以在框架設計中我們直接加入它就好了,至於使用什麼庫來進行下載都是可以的,你可以用 httpclient 也可以用okhttp在本文中我們使用一個超輕量級的網路請求庫 oh-my-request (沒錯,就是在下搞的)。優秀的框架設計會將這個下載組件置為可替換,提供默認的即可。

爬蟲調度器,調度器和我們在開發 web 應用中的控制器是一個類似的概念,它用於在下載器、解析器之間做流轉處理。 解析器可以解析到更多的 URL 發送給調度器,調度器再次的傳輸給下載器,這樣就會讓各個組件有條不紊的進行工作。

網頁解析器我們知道當一個頁面下載完成後就是一段 HTML 的 DOM 字元串表示,但還需要提取出真正需要的數據以前的做法是通過String的API 或者正則表達式的方式在DOM 中搜尋,這樣是很麻煩的,框架 應該提供一種合理、常用、方便的方式來幫助用戶完成提取數據這件事兒。常用的手段是通過xpath或者css選擇器從DOM中進行提取,而且學習這項技能在幾乎所有的爬蟲框架中都是適用的。

數據處理,普通的爬蟲程序中是把網頁解析器和數據處理器合在一起的,解析到數據後馬上處理。 在一個標准化的爬蟲程序中,他們應該是各司其職的,我們先通過解析器將需要的數據解析出來,可能是封裝成對象。然後傳遞給數據處理器,處理器接收到數據後可能是存儲到資料庫,也可能通過介面發送給老王。

❹ 如何防範phantomjs爬蟲

phantomjs實際上就是一個瀏覽器,只是不顯示界面,可以執行頁面的js腳本等。jsdom主要是方便解析html文本,相當於對字元串進行分析。phantomjs對資源的要求和消耗都比較大,如果需要的內容從網頁源代碼中可以解析出來,推薦用jsdom,如果頁面復雜,推薦用phantomjs

❺ 如何將爬蟲完全偽裝成為用戶在瀏覽器的點擊行為

1.偽裝http header,我們可以使用phanomjs的API來實現:

派生到我的代碼片
1. <span style="font-family:SimSun;font-size:18px;">page.customHeaders = {
2. "Referer" : referrer,
3. "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER 1.1"
4. };</span>

2.偽造referer欺騙js,這一點其實就要麻煩一些:我們需要首先打開referer頁面,然後再模擬點擊消息轉到目的網站,具體方法如下:

1. <span style="font-family:SimSun;font-size:18px;">page.onLoadFinished = function(status){
2.
3. // Only once do
4. if ( page.firstLoad ) {
5. page.firstLoad = false;
6. // Inject and Click a Link to our target
7. page.evaluate(function (href) {
8. // Create and append the link
9. var link = document.createElement('a');
10. link.setAttribute('href', href);
11. document.body.appendChild(link);
12.
13. // Dispatch Click Event on the link
14. var evt = document.createEvent('MouseEvents');
15. evt.initMouseEvent('click', true, true, window, 1, 1, 1, 1, 1, false, false, false, false, 0, link);
16. link.dispatchEvent(evt);
17. }, targetUrl);
18. } else {
19. // 此處我們已經成功偽造referer信息,並且打開Target url頁面
20. console.log(targetUrl+"\t"+page.url);
21.
22. };
23. };</span>
3.偽造User Agent欺騙js,這一點其實就要麻煩一些,但是我們也可以通過phantomjs的API來實現:
在CODE上查看代碼片
1. <span style="font-family:SimSun;font-size:18px;">page.settings.userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER";</span>

4. 使用代理,這個phantomjs支持的就更好啦,調用的時候加入代理的參數即可:
派生到我的代碼片
1. <span style="font-family:SimSun;font-size:18px;">phantomjs --proxy=ip:port</span>

5.添加cookies(我知道phantomjs設置cookies可行,目前還沒有驗證,據稱有以下三種方法):

page.customHeaders = {Cookie: xxx}
phantom.addCookie({
'name': 'yandexuid',
'value': '21611441383258191',
'domain': '.yandex.ru'))
});
phantomjs --cookies-file=cookies.txt

說到這里其實我們已經得到了一個動態的爬蟲,它可以之行js代碼,可以抓取到網頁的動態內容,具有瀏覽器的header並且無法被js、ajax、java、php代碼識別,甚至也無法被後台的日誌分析識別。目前為止該方法的qps並不高,因為載入js和phantomjs並發性能不高。
其實這個爬蟲有很多的用處:
1.偽造點擊信息,最近CNZZ公布了中小網站的流量來源中30%是來自奇虎360的,眾所周知CNZZ是植入js代碼統計網站的訪問量和來源的。這些完全可以用我們的代碼偽造訪問量,並且偽造訪問來源呀。
2. 爬取網站動態內容,有很多網站是基於ajax和js設計的,現在我們就可以爬取到這些代碼執行得到的數據。
3.逃避反爬蟲策略,這個就太明顯了。

❻ python怎麼讓phantomjs載入完網頁才返回

一般我們使用python的第三方庫requests及框架scrapy來爬取網上的資源,但是設計javascript渲染的頁面卻不能抓取,此時,我們使用web自動化測試化工具Selenium+無界面瀏覽器PhantomJS來抓取javascript渲染的頁面,下面實現一個簡單的爬取
環境搭建
准備工具:python3.5,selenium,phantomjs
我的電腦裡面已經裝好了python3.5
安裝Selenium

1

pip3 install selenium

安裝Phantomjs
按照系統環境下載phantomjs,下載完成之後,將phantomjs.exe解壓到python的script文件夾下
使用selenium+phantomjs實現簡單爬蟲

1
2
3
4
5
6
7
8
9

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('') #載入網頁
data = driver.page_source #獲取網頁文本
driver.save_screenshot('1.png') #截圖保存
print(data)
driver.quit()

selenium+phantomjs的一些使用方法
設置請求頭里的user-Agent

1
2
3
4
5
6
7
8
9
10
11
12

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

dcap = dict(DesiredCapabilities.PHANTOMJS) #設置useragent
dcap['phantomjs.page.settings.userAgent'] = ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0 ') #根據需要設置具體的瀏覽器信息
driver = webdriver.PhantomJS(desired_capabilities=dcap) #封裝瀏覽器信息
driver.get(') #載入網頁
data = driver.page_source #獲取網頁文本
driver.save_screenshot('1.png') #截圖保存
print(data)
driver.quit()

請求超時設置
webdriver類中有三個和時間相關的方法:
1.pageLoadTimeout 設置頁面完全載入的超時時間,完全載入即完全渲染完成,同步和非同步腳本都執行完
2.setScriptTimeout 設置非同步腳本的超時時間
3.implicitlyWait 識別對象的智能等待時間

1
2
3
4
5
6
7

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5) #設置超時時間
driver.get('')
print(driver.title)
driver.quit()

設置瀏覽器窗口大小
調用啟動的瀏覽器不是全屏的,有時候會影響我們的某些操作,所以我們可以設置全屏

1
2

driver.maximize_window() #設置全屏
driver.set_window_size('480','800') #設置瀏覽器寬480,高800

元素定位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

from selenium import webdriver

driver = webdriver.PhantomJS()
driver.set_page_load_timeout(5)
driver.get('')
try:
driver.get('')
driver.find_element_by_id('kw') # 通過ID定位
driver.find_element_by_class_name('s_ipt') # 通過class屬性定位
driver.find_element_by_name('wd') # 通過標簽name屬性定位
driver.find_element_by_tag_name('input') # 通過標簽屬性定位
driver.find_element_by_css_selector('#kw') # 通過css方式定位
driver.find_element_by_xpath("//input[@id='kw']") # 通過xpath方式定位
driver.find_element_by_link_text("貼吧") # 通過xpath方式定位
print(driver.find_element_by_id('kw').tag_name ) # 獲取標簽的類型
except Exception as e:
print(e)
driver.quit()

操作瀏覽器前進或後退

1
2
3
4
5
6
7
8
9
10
11
12
13
14

from selenium import webdriver
driver = webdriver.PhantomJS()
try:
driver.get('') #訪問網路首頁
driver.save_screenshot('1.png')
driver.get('') #
driver.save_screenshot('2.png')
driver.back() #回退到網路首頁
driver.save_screenshot('3.png')
driver.forward() #前進到新浪首頁
driver.save_screenshot('4.png')
except Exception as e:
print(e)
driver.quit()

❼ 在docker中遠程調用PhantomJS

背景:寫了一個爬蟲程序使用的docker部署,部署拆逗模後在旅緩docker中安裝PhantomJS 比較麻煩,於是想到了再另一個docker容器中部署一個PhantomJS ,通過遠程調用的方式來使用它

通過指返Java 調用:

通過python調用,先運行 pip install selenium安裝selenium

監控一下docker的日誌,發現調用成功

參考:

❽ 無頭瀏覽器是什麼它有什麼用

什麼是無頭瀏覽器 平時我們上網查閱信息、觀看視頻等活動,一般都是通過瀏覽器完成的,IE、chrome、火狐等都是我們經常使用的瀏覽器,它們都擁有非常好用的可視化操作界面,配合滑鼠就可以進行網上活動。

而無頭瀏覽器也叫做無界面瀏覽器,它可以運行在伺服器端,也具有普通瀏覽器的能力,只是它沒有界面,

常見的框架有Puppeteer、Phantomjs等
無頭瀏覽器的特點
1、使用方式

我們以Phantomjs為例,既可以以cli方式使用,也可以在代碼中require進去,它甚至可以提供一個類似於node那樣的REPL環境。

2、載入網路資源

既然是瀏覽器,載入網路資源顯然是其基本的能力,resourceReceived和resourceRequested這兩個回調函數可以監控載入的資源,利用它們就可以做一些網路監控。既然能獲取網頁的內容,那麼就可以用來做爬蟲!

3、截圖

既然是無界面的,那如果我們想看載入的頁面是什麼樣子的,怎麼辦?它提供了截圖功能,使用render方法就可以生成頁面快照,還提供了設置網頁大小等功能。

4、插入外部資源

它可以向頁面中插入外部資源,比如插入一個js,這一點上比較像chrome插件。

5、生成自定義網頁

它既能獲取人家的網頁,同時也能生成自己的網頁,設置content屬性就行。

6、提供document和window對象

在伺服器中是不存在document和window對象的,但是Phantomjs提供了這兩個變數。

7、操作頁面

既然Phantomjs提供了document和window這兩大對象,那麼我們就可以像在普通瀏覽器裡面一樣使用它們的方法槐游,比如操作dom元素、發送dom事件等。

8、測試

Phantomjs本身並不是測試框架,但是它可以配合jasmine等測試框架進行自動化測試。

無頭就是headless 的中文,所謂無頭瀏覽器就是沒有用戶界面的瀏覽器。

它可以運行在伺服器端,通過命令行的方式調用,比鉛隱銷如需要截取任意網站的截圖,網址由用戶輸入,那就需要在伺服器端裝一個headless瀏覽器,可以命令調用來截圖。攜岩

除了截圖,還能操作DOM,做一些爬蟲的事情,在伺服器端完成自動化操作。

常用的有三個:Selenium,PhantomJS,Chrome-headless 。

使用舉例:

這樣就實現了截取網路這個網站的頁面。

更復雜的操作就要看手冊了

❾ 使用phantomjs爬取頁面內容時,內存佔用過多如何解決

怎說,我當時寫爬蟲的時候,也是開了多台gecodriver的進程,但是我用Python監控了cpu的資源管理,佔用率太高了我就kill掉一部分的進程,如果是進程本身就死掉當然會kill並且有重啟機制。當然最後穩定下來確定了每台機器開幾個進程利用率很高。

❿ python爬蟲用什麼框架

python爬蟲框架概述
爬蟲框架中比較好用的是 Scrapy 和PySpider。pyspider上手更簡單,操作更加簡便,因為它增加了 WEB 界面,寫爬蟲迅速,集成了phantomjs,可以用來抓取js渲染的頁面。Scrapy自定義程度高,比 PySpider更底層一些,適合學習研究,需要學習的相關知識多,不過自己拿來研究分布式和多線程等等是非常合適的。
PySpider
PySpider是binux做的一個爬蟲架構的開源化實現。主要的功能需求是:
抓取、更新調度多站點的特定的頁面
需要對頁面進行結構化信息提取
靈活可擴展,穩定可監控
pyspider的設計基礎是:以python腳本驅動的抓取環模型爬蟲
通過python腳本進行結構化信息的提取,follow鏈接調度抓取控制,實現最大的靈活性
通過web化的腳本編寫、調試環境。web展現調度狀態
抓取環模型成熟穩定,模塊間相互獨立,通過消息隊列連接,從單進程到多機分布式靈活拓展
pyspider的架構主要分為 scheler(調度器), fetcher(抓取器), processor(腳本執行):
各個組件間使用消息隊列連接,除了scheler是單點的,fetcher 和 processor 都是可以多實例分布式部署的。 scheler 負責整體的調度控制
任務由 scheler 發起調度,fetcher 抓取網頁內容, processor 執行預先編寫的python腳本,輸出結果或產生新的提鏈任務(發往 scheler),形成閉環。
每個腳本可以靈活使用各種python庫對頁面進行解析,使用框架API控制下一步抓取動作,通過設置回調控制解析動作。
Scrapy
Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。 可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網路爬蟲。Scrapy用途廣泛,可以用於數據挖掘、監測和自動化測試
Scrapy主要包括了以下組件:
引擎(Scrapy): 用來處理整個系統的數據流處理, 觸發事務(框架核心)
調度器(Scheler): 用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重復的網址
下載器(Downloader): 用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的非同步模型上的)
爬蟲(Spiders): 爬蟲是主要幹活的, 用於從特定的網頁中提取自己需要的信息, 即所謂的實體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面
項目管道(Pipeline): 負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息。當頁面被爬蟲解析後,將被發送到項目管道,並經過幾個特定的次序處理數據。
下載器中間件(Downloader Middlewares): 位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
爬蟲中間件(Spider Middlewares): 介於Scrapy引擎和爬蟲之間的框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
調度中間件(Scheler Middewares): 介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
Scrapy運行流程大概如下:
首先,引擎從調度器中取出一個鏈接(URL)用於接下來的抓取
引擎把URL封裝成一個請求(Request)傳給下載器,下載器把資源下載下來,並封裝成應答包(Response)
然後,爬蟲解析Response
若是解析出實體(Item),則交給實體管道進行進一步的處理。
若是解析出的是鏈接(URL),則把URL交給Scheler等待抓取

閱讀全文

與phantomjs網路爬蟲相關的資料

熱點內容
更新後版本英文怎麼說 瀏覽:267
桌面雲配置文件分離 瀏覽:505
iphone5如何升級4g網路 瀏覽:5
團購是在哪個app 瀏覽:897
打開多個word文檔圖片就不能顯示 瀏覽:855
騰訊新聞怎麼切換版本 瀏覽:269
app安裝失敗用不了 瀏覽:326
桌面文件滑鼠點開會變大變小 瀏覽:536
手機誤刪系統文件開不了機 瀏覽:883
微信兔子甩耳朵 瀏覽:998
android藍牙傳文件在哪裡 瀏覽:354
蘋果6s軟解是真的嗎 瀏覽:310
c語言代碼量大 瀏覽:874
最新網路衛星導航如何使用 瀏覽:425
以下哪些文件屬於圖像文件 瀏覽:774
zycommentjs 瀏覽:414
確認全血細胞減少看哪些數據 瀏覽:265
文件有哪些要求 瀏覽:484
cad打開時會出現兩個文件 瀏覽:65
什麼是轉基因網站 瀏覽:48

友情鏈接