1. 程式人生 > >python+selenium+phantomjs實現爬蟲功能

python+selenium+phantomjs實現爬蟲功能

一.phantomjs介紹

phantomjs是一個基於webkit核心的無頭瀏覽器,即沒有UI介面,即它就是一個瀏覽器,只是其內的點選、翻頁等人為相關操作需要程式設計實現

提供javascript API介面,即通過編寫js程式可以直接與webkit核心互動,在此之上可以結合java語言等,通過java呼叫js等相關操作,從而解決了以前c/c++才能比較好的基於webkit開發優質採集器的限制。

提供windows、linux、mac等不同os的安裝使用包,也就是說可以在不同平臺上二次開發採集專案或是自動專案測試等工作。

二.安裝phantomjs

phantomjs1.9.1以上版本
從官網下載phantomjs-2.1.1-linux-x86_64.tar.bz2,直接解壓即可。
進入bin目錄,有個phantomjs可執行檔案,直接執行js檔案。

如:test.js檔案:

console.log('Hello world!');
phantom.exit();//這一行表示退出命令列

為了方便使用phantomjs命令,建立軟連線,把phantomjs檔案軟鏈到/usr/bin目錄下。
ln -s /home/zhb/software/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/bin/

三.python及Selenium模組安裝

python安裝過程省略。

Selenium是一個用於Web應用程式測試的工具。Selenium測試直接執行在瀏覽器中,就像真正的使用者在操作一樣。支援的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個工具的主要功能包括:測試與瀏覽器的相容性——測試你的應用程式看是否能夠很好得工作在不同瀏覽器和作業系統之上。測試系統功能——建立迴歸測試檢驗軟體功能和使用者需求。支援自動錄製動作和自動生成 .Net、Java、Perl等不同語言的測試指令碼。

安裝selenium模組。
下載selenium:
https://pypi.python.org/pypi/selenium
安裝:
python setup.py install
測試是否安裝成功:
from selenium import webdriver

四.簡單示例

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from
selenium.webdriver.common.action_chains import ActionChains #設定瀏覽器的請求頭及一些引數 dcap = dict(DesiredCapabilities.PHANTOMJS) dcap["phantomjs.page.settings.userAgent"] = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0" #不載入圖片 dcap["phantomjs.page.settings.loadImages"] = False driver = webdriver.PhantomJS(executable_path="/usr/bin/phantomjs", desired_capabilities = dcap) #設定頁面最長載入時間為40s driver.set_page_load_timeout(40) driver.get("https://www.baidu.com/") #列印title print driver.title #列印當前url print driver.current_url #呼叫find_element_by_css_selector函式按照css樣式取出css元素 #如果該樣式不存在,會丟擲異常 #find_elements_by_css_selector是取出所有符合條件的css樣式表,返回的陣列 a = driver.find_element_by_css_selector('div#ui a[name="tj_trnews"]') a_text = a.text a_href = a.get_attribute('href') b = driver.find_elements_by_css_selector('div#ui a[name="tj_trnews"]') b_0_text = b[0].text b_0_href = b[0].get_attribute('href') #點選某個a標籤 driver.find_element_by_css_selector('a[data-reactid=".2.1.2.0.0.0.0:$tab_1.0"]').click() #判斷ajax請求後,css元素是否載入成功 #10s內每隔500ms重新整理一次頁面變化,判斷該元素是否成功載入 #lambda表示式返回bool值,也可以用其他表示式 def is_css_selector_loaded(css_selector, wait_time=10): try: wait_for_ajax_element=WebDriverWait(driver, wait_time) wait_for_ajax_element.until( lambda the_driver:the_driver.find_element_by_css_selector(css_selector).is_displayed()) return True except Exception, e: print 'fail to load css selector by ajax:%s' % (css_selector) return False #執行js程式碼 div_block_js = "sub_titles=document.querySelectorAll('div.yx-cp-tabNav-dropdown');for(i=0;i<sub_titles.length;i++){sub_titles[i].style.display='block';}" driver.execute_script(div_block_js)#利用js把隱藏的div顯示出來 #滑鼠移到某個元素懸停 ActionChains(driver).move_to_element(a).context_click().perform() #關閉所有視窗 driver.quit()

五. 利用python的requests模組傳送http請求

以上方法是利用phantomjs模擬瀏覽器來抓取並解析頁面元素,也可以用python的requests模組傳送http請求獲得資料(實際就是刷介面,解析json資料),如果介面返回的不是json串,那還是用phantomjs瀏覽器抓取元素比較方便,或者用Beautiful Soup來解析html程式碼。

首先確保python安裝了urllib和requests模組。

下面是示例程式碼:

import urllib
import requests
import json

#傳送post請求
post_headers = {"Referer":"https://youpin.mi.com", "Content-Type":"application/x-www-form-urlencoded"}
post_params = urllib.urlencode({"data":'''{"uClassList":{"model":"Homepage","action":"GetUclassList","parameters":{"id":131056}}}'''})
http_result = requests.post("https://youpin.mi.com/app/shopv3/pipe", headers = post_headers, data = post_params)

#解析返回的json
http_result = json.loads(http_result.text)
if http_result.has_key('code'):
    print http_result["code"]["pid"]


#傳送get請求
http_headers = {"Content-Type":"application/json;charset=UTF-8"}
http_result = requests.get("http://blog.csdn.net/okiwilldoit/article/GetMyYunStatus", headers = http_headers)

#解析HTTP response
result_json = json.loads(http_result.text)

相關推薦

python+selenium+phantomjs實現爬蟲功能

一.phantomjs介紹 phantomjs是一個基於webkit核心的無頭瀏覽器,即沒有UI介面,即它就是一個瀏覽器,只是其內的點選、翻頁等人為相關操作需要程式設計實現。 提供javascript API介面,即通過編寫js程式可以直接與webkit核心

python+selenium呼叫瀏覽器(IE-Chrome-Firefox)實現爬蟲功能

    好記性不如爛筆頭,今天把selenium呼叫瀏覽器操作總結一下。     首先,得先明確,為什麼要採用selenium來模擬登陸網頁。最主要的原因我認為還是在於通過這種模擬登入方式獲取的頁面html程式碼,可以把js裡的內容也獲取到,而通過urllib方式模擬登入的

linux爬蟲開發環境配置python+selenium+phantomJS

你可能會遇到以下問題不知道怎麼解決,raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverExce

java實現爬蟲功能

ack 訪問 base aid for tail tor obj 執行 /** * 爬取新聞信息,封裝成實體bean */public class GetNews { public List<News> getNews() { // 存儲新聞對象 List&

python+selenium+PhantomJS爬取網頁動態加載內容

use for ive comm 自動化測試 mac os x page 影響 blank 一般我們使用python的第三方庫requests及框架scrapy來爬取網上的資源,但是設計javascript渲染的頁面卻不能抓取,此時,我們使用web自動化測試化工具Selen

利用Selenium+PhantomJS 實現截圖

rgs 重載 public 服務器 console read using default tom using OpenQA.Selenium; using OpenQA.Selenium.PhantomJS; using System; using Syste

python+selenium+autoit實現文件上傳

分享 () 可執行文件 event avatar controls 執行 inf 驗證 問題 在做web端ui層自動化的時候會碰到文件上傳的操作,經常有朋友問到,這裏總結一下 解決方案 第一種:type=file的上傳文件,類似如下的 使用類似這樣的代碼就可以完成: dr

selenium+PhantomJS簡單爬蟲

10月19 span 文件名 usr fin pre except sta selector #!/usr/bin/env python # -*- coding: utf-8 -*- ‘‘‘ Created on 2017年10月19日 @author: zz

python-threading.Event實現事件功能--汽車過紅綠燈(轉載)

pan class 控制 http 紅綠燈 dom and false blank python-threading.Event實現事件功能 enent可以通過設置、等待、清除一個標識(flag),來進行線程間的控制線程可以通過獲取這個標誌位(flag)的狀態(設置或未設置

Python + selenium + requests實現12306全自動搶票,驗證碼破解加自動點選!!!

Python + selenium + requests實現12306全自動搶票,驗證碼破解加自動點選!!!!! 測試結果: 整個買票流程可以再快一點,不過為了穩定起見,有些地方等待了一些時間 完整程式,拿去可用 整個程式分了三個模組:購票模組(主體)、驗證碼識別模組、餘票查

Python+Selenium 自動化實現例項-處理分頁(pagination)

  場景   對分頁來說,我們最感興趣的是下面幾個資訊 總共有多少頁 當前是第幾頁 是否可以上一頁和下一頁 程式碼 下面程式碼演示如何獲取分頁總數及當前

12306搶票 python+selenium+chrome 實現

市面上的搶票軟體多的很。老套路,開關肯定是思考。 市場軟體用的技術方案:.NET,外掛。為免不是最好的方案,決定用Python,但怎麼搞。 這個我可是零基礎,還是百度下,突然間眼前一亮。12306搶票軟體原始碼詳解 從這裡有發現了一系列檔案,在邊學邊操的模式開幹。後續寫一系列文章,參

python+selenium win32gui實現檔案上傳 enumerate() Unity3d中SendMessage 用法簡單筆記

upload = dr.find_element_by_id('exampleInputFile0') upload.click() time.sleep(1) # win32gui dialog = win32gui.FindWindow('#32770', u'開啟') # 對話方塊 ComboBoxE

python+selenium+phantomjs 踩坑

在寫爬蟲時遇到有些網頁載入超時的情況,以下對比一下他們的優缺點: WebDriverWait():selenium設定元素髮現超時等待時間 WebDriverWait()函式是在在設定時間內,預設每隔一段時間檢測一次當前頁面所指定元素是否存在,如果超過設定時

Python Selenium + PhantomJS爬取考拉海購商品資料

爬完QQ音樂以後打算爬網易雲音樂的,中間出了一點小狀況,就改爬考拉海購了(什麼狀況你猜呀❛˓◞˂̶✧以後會爬完網易雲音樂的!) 今天寫近段時間的最後一篇,寫完這篇就要開始期末複習了,寒假再來更新 pip install selenium 下載s

使用python+selenium製作瀏覽器爬蟲,徹底解決ajax非同步載入問題(待更新)

開啟瀏覽器需要下載相應的webdriver並儲存到系統path下。chrome對應的webdriver下載地址:http://download.csdn.net/detail/u013760453/9790569 from selenium import webdriver

python+selenium+unittest 實現自動化測試

示例程式碼: baidu.py import csv #匯入csv模組 from itertools import islice #從itertools匯入islice,後邊讓其預設跳過第一行使用 from time import sleep from

python專案實戰:實現錄音功能小程式

前言 本節為大家詳細介紹python實現錄音小程式的案例,實現錄完音後並播放,是一個蠻有趣的案例,具有很好的參考價值和實際應用功

python 利用PhantomJS + selenium 實現爬蟲機制滑動驗證

PhantomJS是一個基於webkit的JavaScript API。它使用QtWebKit作為它核心瀏覽器的功能,使用webkit來編譯解釋執行JavaScript程式碼。 PhantomJS官方地址:http://phantomjs.org/ 匯入selenium庫 from se