日韩精品亚洲精品中文字幕乱伦AV|曰韩区二区三区日韩中文字幕五码|ady99久久人人看人人摸人人|动漫一区二区黄99精品视频在线|AV片在线观看亚洲中文国产精品|伦乱在线VA欧美性爱一二区|亚洲无码mv91热色视频|激情六月综合欧美精品中文

當(dāng)前位置:首頁(yè) > 軟件開(kāi)放 > 正文內(nèi)容

selenium爬取網(wǎng)頁(yè)(selenium爬取網(wǎng)頁(yè)數(shù)據(jù))

軟件開(kāi)放2年前 (2023-02-21)994

本篇文章給大家談?wù)剆elenium爬取網(wǎng)頁(yè),以及selenium爬取網(wǎng)頁(yè)數(shù)據(jù)對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。

本文目錄一覽:

python下 selenium與chrome結(jié)合進(jìn)行網(wǎng)頁(yè)爬取,怎么設(shè)置代理IP

#coding:utf-8

import sys,re,random,time,os

import socket

from socket import error as socket_error

import threading

import urllib2,cookielib

from bs4 import BeautifulSoup

from selenium import webdriver

from selenium.webdriver.common.proxy import *

from selenium.webdriver.firefox.firefox_profile import FirefoxProfile

from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

proxyFilePath = time.strftime("%Y%m%d")

def testSocket(ip, port):

'''

socket連接測(cè)試,用來(lái)檢測(cè)proxy ip,port 是否可以正常連接

'''

print '正在測(cè)試socket連接...'

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:

sock.settimeout(10)

sock.connect((ip, int(port)))

#sock.send('meta')

sock.close()

print ip+':'+port+'--status:ok'

return 1

except socket_error as serr: # connection error

sock.close()

print ip+':'+port+'--status:error--Connection refused.'

return 0

def getDriver(httpProxy = '', type='Firefox'):

if type == 'Firefox':

proxy = Proxy({

'proxyType': ProxyType.MANUAL,

'httpProxy': httpProxy,

'ftpProxy': httpProxy,

'sslProxy': httpProxy,

'noProxy': '' # set this value as desired

})

firefox_profile = FirefoxProfile()

#firefox_profile.add_extension("firefox_extensions/adblock_plus-2.5.1-sm+tb+an+fx.xpi")

firefox_profile.add_extension("firefox_extensions/webdriver_element_locator-1.rev312-fx.xpi")

firefox_profile.set_preference("browser.download.folderList",2)

firefox_profile.set_preference("webdriver.load.strategy", "unstable")

#driver = webdriver.Firefox(firefox_profile = firefox_profile, proxy=proxy, firefox_binary=FirefoxBinary('/usr/bin/firefox'))

#driver = webdriver.Firefox(firefox_profile = firefox_profile, proxy=proxy, firefox_binary=FirefoxBinary("/cygdrive/c/Program\ Files\ (x86)/Mozilla\ Firefox/firefox.exe"))

driver = webdriver.Firefox(firefox_profile = firefox_profile, proxy=proxy)

elif type == 'PhantomJS': # PhantomJS

service_args = [

'--proxy='+httpProxy,

'--proxy-type=http',

]

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'

webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.User-Agent'] = 'Mozilla/5.0 (X11; Windows x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36'

driver = webdriver.PhantomJS(executable_path='windows/phantomjs.exe', service_args=service_args)

else: # Chrome

chrome_options = webdriver.ChromeOptions()

#chrome_options.add_extension('firefox_extensions/adblockplus_1_7_4.crx')

chrome_options.add_argument('--proxy-server=%s' % httpProxy)

driver = webdriver.Chrome(executable_path='windows/chromedriver.exe', chrome_options=chrome_options)

return driver

從零開(kāi)始學(xué)Python-使用Selenium抓取動(dòng)態(tài)網(wǎng)頁(yè)數(shù)據(jù)

AJAX(Asynchronouse JavaScript And XML:異步JavaScript和XML)通過(guò)在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新,這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行局部更新。傳統(tǒng)的網(wǎng)頁(yè)(不使用Ajax)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁(yè)頁(yè)面。

因?yàn)閭鹘y(tǒng)的網(wǎng)頁(yè)在傳輸數(shù)據(jù)格式方面,使用的是 XML 語(yǔ)法,因此叫做 AJAX ,其實(shí)現(xiàn)在數(shù)據(jù)交互基本上都是使用 JSON 。使用AJAX加載的數(shù)據(jù),即使使用了JS將數(shù)據(jù)渲染到了瀏覽器中,在 右鍵-查看網(wǎng)頁(yè)源代碼 還是不能看到通過(guò)ajax加載的數(shù)據(jù),只能看到使用這個(gè)url加載的html代碼。

法1:直接分析ajax調(diào)用的接口。然后通過(guò)代碼請(qǐng)求這個(gè)接口。

法2:使用Selenium+chromedriver模擬瀏覽器行為獲取數(shù)據(jù)。

Selenium 相當(dāng)于是一個(gè)機(jī)器人??梢阅M人類在瀏覽器上的一些行為,自動(dòng)處理瀏覽器上的一些行為,比如點(diǎn)擊,填充數(shù)據(jù),刪除cookie等。 chromedriver 是一個(gè)驅(qū)動(dòng) Chrome 瀏覽器的驅(qū)動(dòng)程序,使用他才可以驅(qū)動(dòng)瀏覽器。當(dāng)然針對(duì)不同的瀏覽器有不同的driver。以下列出了不同瀏覽器及其對(duì)應(yīng)的driver:

現(xiàn)在以一個(gè)簡(jiǎn)單的獲取百度首頁(yè)的例子來(lái)講下 Selenium 和 chromedriver 如何快速入門:

參考:Selenium的使用

直接直接分析ajax調(diào)用的接口爬取

selenium結(jié)合lxml爬取

selenium通過(guò)人機(jī)驗(yàn)證爬蟲(chóng)

之前在學(xué)校曾經(jīng)用過(guò)request+xpath的方法做過(guò)一些爬蟲(chóng)腳本來(lái)玩,從ios正式轉(zhuǎn)前端之后,出于興趣,我對(duì)爬蟲(chóng)和反爬蟲(chóng)又做了一些了解,然后發(fā)現(xiàn)了selenium這個(gè)神器。selenium原本是一款測(cè)試工具,但由于他可以較好的模擬瀏覽器的各種操作,完全無(wú)視對(duì)于user-agent的限制,所以現(xiàn)在被更多的用于爬蟲(chóng)腳本中。這里記錄一下借助selenium庫(kù)進(jìn)行爬蟲(chóng)時(shí)碰到的一些問(wèn)題以及解決方法。(拒絕惡意爬蟲(chóng)從我做起)

selenium的安裝不多說(shuō), pip install selenium就行。不過(guò)要注意自己的python版本,要是3.x才行。用它打開(kāi)瀏覽器,然后通過(guò)dom操作獲取需要的dom節(jié)點(diǎn)。

如果需要登錄的,也可以事先將賬號(hào)密碼寫(xiě)好,然后用send_keys方法進(jìn)行自動(dòng)輸入。

然后需要什么就直接通過(guò)dom方法來(lái)獲取。不過(guò)現(xiàn)在很多網(wǎng)站的url有防爬處理,使用了不規(guī)律的url,無(wú)法像豆瓣排行榜那樣直接遍歷。但這個(gè)不難,用selenium就是要模擬人的操作的,真人操作的時(shí)候也不會(huì)直接輸url來(lái)一頁(yè)一頁(yè)看,比如在線閱讀的網(wǎng)站,一般都會(huì)有個(gè)目錄頁(yè)。先爬取目錄頁(yè)面的信息,先將正文url列表保存下來(lái),然后再遍歷列表就行。

這里有個(gè)sleep,目的是是確保目錄頁(yè)能完全加載完。當(dāng)然這個(gè)方法有點(diǎn)蠢,后面我使用了不同的方法來(lái)做頁(yè)面加載完成的判斷。

頁(yè)面加載完成需要時(shí)間,一定要等頁(yè)面加載好了才能獲取頁(yè)面元素。而直接設(shè)置一個(gè)固定的sleep顯然是效率極低且容易出錯(cuò)的。這里有幾種不同的方法來(lái)自動(dòng)判斷頁(yè)面加載的情況。

監(jiān)視我最終需要的元素有沒(méi)有加載完成,加載完成了就開(kāi)始后續(xù)操作。比如我要的dom節(jié)點(diǎn)有一個(gè)類名為'page-content',并且在整個(gè)頁(yè)面中一共有兩處,而我需要的是第二處。那就可以監(jiān)視這個(gè)節(jié)點(diǎn)的加載情況。

這里設(shè)置了0.5秒的刷新周期,當(dāng)然可以設(shè)置的更短,然后設(shè)置了10秒的timeout,超時(shí)自動(dòng)打開(kāi)下一章。

這就很簡(jiǎn)單了,就一句話,最多等10秒,進(jìn)行下一步。要是提前加載完就提前進(jìn)行。這個(gè)方便是方便,但是不好用,他會(huì)等頁(yè)面完全加載完才進(jìn)行下一步,而事實(shí)上我只需要等正文加載完就行,所以效率上要差一點(diǎn)。

顯性等待的好處就是可以在我需要的元素加載完的時(shí)候就進(jìn)入下一步,獲取元素內(nèi)容,但是也有不好的地方,那就是還不夠靈活。顯性等待在超時(shí)的時(shí)候會(huì)拋出TimeoutException異常,在暴露的接口中沒(méi)有給我定義異常處理的地方,這也是我選擇自己實(shí)現(xiàn)一遍等待機(jī)制的原因,這樣我可以對(duì)超時(shí)的異常進(jìn)行處理。

很多時(shí)候,我們會(huì)發(fā)現(xiàn),在登錄賬號(hào)時(shí),系統(tǒng)會(huì)要我們輸入驗(yàn)證碼。如果想要讓腳本自動(dòng)識(shí)別驗(yàn)證碼,可能就涉及到圖像識(shí)別技術(shù),還有一些第三方的服務(wù)可以使用,也是可行的。

但有的時(shí)候,網(wǎng)站會(huì)使用更為復(fù)雜的人機(jī)驗(yàn)證。比如這樣的:

二.動(dòng)態(tài)網(wǎng)頁(yè)抓取

因此,我們?nèi)绻褂?AJAX 加載的動(dòng)態(tài)網(wǎng)頁(yè),怎么爬取里面動(dòng)態(tài)加載的內(nèi)容呢?有兩種方法:

方法1操作步驟:

步驟:

selenium選擇元素的方法有很多:

有時(shí)候,我們需要查找多個(gè)元素。在上述例子中,我們就查找了所有的評(píng)論。因此,也有對(duì)應(yīng)的元素選擇方法,就是在上述的element后加上s,變成elements。

其中xpath和css_selector是比較好的方法,一方面比較清晰,另一方面相對(duì)其他方法定位元素比較準(zhǔn)確。

除此之外,我們還可以使用selenium操作元素方法實(shí)現(xiàn)自動(dòng)操作網(wǎng)頁(yè)。常見(jiàn)的操作元素方法如下:

– clear 清除元素的內(nèi)容

– send_keys 模擬按鍵輸入

– click 點(diǎn)擊元素

– submit 提交表單

由于篇幅有限,有興趣的讀者,可以到selenium的官方文檔查看:

python網(wǎng)絡(luò)爬蟲(chóng):Selenium

獲取頁(yè)面每個(gè)Cookies值,用法如下

driver.add_cookie(cookie_dict)

一個(gè)瀏覽器肯定會(huì)有很多窗口,所以我們肯定要有方法來(lái)實(shí)現(xiàn)窗口的切換。切換窗口的方法如下:

imgs = driver.find_elements_by_xpath("http://img")

for img in imgs:

driver.execute_script('$(arguments[0]).fadeOut()',img)

driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

driver.execute_script('alert("This is a alert")')

driver.quit()

從零開(kāi)始學(xué)python爬蟲(chóng)(八):selenium提取數(shù)據(jù)和其他使用方法

知識(shí)點(diǎn):

知識(shí)點(diǎn):了解 driver對(duì)象的常用屬性和方法

注意:最新版本的selenium已經(jīng)取消了這種格式,取而代之的是:

你要先導(dǎo)入:

然后再:

知識(shí)點(diǎn):掌握 driver對(duì)象定位標(biāo)簽元素獲取標(biāo)簽對(duì)象的方法

代碼實(shí)現(xiàn),如下,獲取騰訊新聞首頁(yè)的新聞標(biāo)簽的內(nèi)容。

知識(shí)點(diǎn):掌握 元素對(duì)象的操作方法

參考代碼示例:

知識(shí)點(diǎn):掌握 selenium控制標(biāo)簽頁(yè)的切換

知識(shí)點(diǎn):掌握 selenium控制frame標(biāo)簽的切換

知識(shí)點(diǎn):掌握 利用selenium獲取cookie的方法

知識(shí)點(diǎn):掌握 selenium控制瀏覽器執(zhí)行js代碼的方法

知識(shí)點(diǎn):掌握 手動(dòng)實(shí)現(xiàn)頁(yè)面等待

知識(shí)點(diǎn):掌握 selenium開(kāi)啟無(wú)界面模式

知識(shí)點(diǎn):了解 selenium使用代理ip

知識(shí)點(diǎn):了解 selenium替換user-agent

關(guān)于selenium爬取網(wǎng)頁(yè)和selenium爬取網(wǎng)頁(yè)數(shù)據(jù)的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

掃描二維碼推送至手機(jī)訪問(wèn)。

版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。

本文鏈接:http://www.atlasseeker.com/post/9282.html

“selenium爬取網(wǎng)頁(yè)(selenium爬取網(wǎng)頁(yè)數(shù)據(jù))” 的相關(guān)文章

移動(dòng)終端軟件開(kāi)發(fā)(移動(dòng)終端軟件開(kāi)發(fā)實(shí)驗(yàn)報(bào)告)

移動(dòng)終端軟件開(kāi)發(fā)(移動(dòng)終端軟件開(kāi)發(fā)實(shí)驗(yàn)報(bào)告)

本篇文章給大家談?wù)勔苿?dòng)終端軟件開(kāi)發(fā),以及移動(dòng)終端軟件開(kāi)發(fā)實(shí)驗(yàn)報(bào)告對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。 本文目錄一覽: 1、軟件工程(移動(dòng)終端軟件開(kāi)發(fā)) 是什么?干嘛的?學(xué)什么? 2、計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)(移動(dòng)終端軟件開(kāi)發(fā))大概是干什么的? 3、如何開(kāi)發(fā)一個(gè)移動(dòng)終端app軟件...

東莞app軟件開(kāi)發(fā)(東莞app軟件開(kāi)發(fā)找聚頂科技在)

東莞app軟件開(kāi)發(fā)(東莞app軟件開(kāi)發(fā)找聚頂科技在)

今天給各位分享東莞app軟件開(kāi)發(fā)的知識(shí),其中也會(huì)對(duì)東莞app軟件開(kāi)發(fā)找聚頂科技在進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、東莞APP軟件開(kāi)發(fā)多少錢 2、東莞軟件開(kāi)發(fā)公司哪家好? 3、app開(kāi)發(fā)公司哪家好一點(diǎn)? 4、東莞app開(kāi)發(fā)公司哪家好...

ansible批量修改服務(wù)器密碼(ansible sudo 需要密碼)

ansible批量修改服務(wù)器密碼(ansible sudo 需要密碼)

今天給各位分享ansible批量修改服務(wù)器密碼的知識(shí),其中也會(huì)對(duì)ansible sudo 需要密碼進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、Ansible安裝配置和基本使用 2、使用Ansible實(shí)現(xiàn)自動(dòng)化運(yùn)維的一些技巧 3、使用ansible...

我的世界工作室官網(wǎng)源碼(我的世界服務(wù)器官網(wǎng)源碼)

我的世界工作室官網(wǎng)源碼(我的世界服務(wù)器官網(wǎng)源碼)

今天給各位分享我的世界工作室官網(wǎng)源碼的知識(shí),其中也會(huì)對(duì)我的世界服務(wù)器官網(wǎng)源碼進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、誰(shuí)知道我的世界工作室是什么?用來(lái)干嘛的?? 2、我的世界如何創(chuàng)建工作室? 3、我的世界如何成立工作室? 4、我的世界工作室...

機(jī)器人框架源碼(機(jī)器人框架源碼無(wú)版權(quán))

機(jī)器人框架源碼(機(jī)器人框架源碼無(wú)版權(quán))

今天給各位分享機(jī)器人框架源碼的知識(shí),其中也會(huì)對(duì)機(jī)器人框架源碼無(wú)版權(quán)進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、請(qǐng)問(wèn)人工智能機(jī)器人和源碼熊少兒編程有什么區(qū)別? 2、ur機(jī)器人程序另存為是跳出來(lái)defaultinstallat 3、那位大俠 能幫我下...

iphone信任軟件怎么設(shè)置(iphone哪里設(shè)置信任軟件)

iphone信任軟件怎么設(shè)置(iphone哪里設(shè)置信任軟件)

今天給各位分享iphone信任軟件怎么設(shè)置的知識(shí),其中也會(huì)對(duì)iphone哪里設(shè)置信任軟件進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問(wèn)題,別忘了關(guān)注本站,現(xiàn)在開(kāi)始吧!本文目錄一覽: 1、蘋(píng)果手機(jī)軟件信任在哪設(shè)置 2、iphone信任軟件怎么設(shè)置的? 3、如何在蘋(píng)果手機(jī)中設(shè)置信任軟件? 蘋(píng)果手機(jī)軟件...