selenium網(wǎng)頁(yè)源碼xml解析(selenium 獲取html)
今天給各位分享selenium網(wǎng)頁(yè)源碼xml解析的知識(shí),其中也會(huì)對(duì)selenium 獲取html進(jìn)行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!
本文目錄一覽:
- 1、selenium xml腳本怎么用
- 2、python,求一個(gè)簡(jiǎn)單的selenium+re的網(wǎng)頁(yè)源碼爬取
- 3、python爬蟲怎么獲取動(dòng)態(tài)的網(wǎng)頁(yè)源碼
selenium xml腳本怎么用
先對(duì)XPath做個(gè)簡(jiǎn)坦培短介紹,之后用實(shí)例具體說明: 1.EXTJS的頁(yè)面源碼是多個(gè)div組成的,對(duì)于div id為常量時(shí),可用div先定位,再由其讓裂唯他標(biāo)簽定位,例如input field可用label name,button可用button上的文字來定位源春。 2.在定位更接近目標(biāo)的節(jié)點(diǎn)時(shí)可用
python,求一個(gè)簡(jiǎn)單的selenium+re的網(wǎng)頁(yè)源碼爬取
網(wǎng)頁(yè)爬取不一定要用Selenium,Selenium是為渣螞老了注入瀏覽器獲取點(diǎn)擊行為的調(diào)試工具,如果網(wǎng)頁(yè)無(wú)需人工交互就可以抓取,不建議你物臘使用selenium。要使用它,你需要安裝一個(gè)工具軟件,使用Chrome瀏覽器需要下載chromedriver.exe到system32下,如使用firefox則要下載geckodriver.exe到system32下。下面以chromedriver驅(qū)動(dòng)chrome為例:
#?-*-?coding:UTF-8?-*-
from?selenium?import?webdriver
from?bs4?import?BeautifulSoup
import?re
import?time
if?__name__?==?'__main__':
options?=?webdriver.ChromeOptions()
options.add_argument('user-agent="Mozilla/5.0?(Linux;?Android?4.0.4;?Galaxy?Nexus?Build/IMM76B)?AppleWebKit/535.19?(KHTML,?like?Gecko)?Chrome/18.0.1025.133?Mobile?Safari/535.19"')
driver?=?webdriver.Chrome()
driver.get('url')#你要抓取百度文庫(kù)的URL,隨便找個(gè)幾十頁(yè)的替換掉
html?=?driver.page_source
bf1?=?BeautifulSoup(html,?'lxml')
result?=?bf1.find_all(class_='rtcspage')
bf2?=?BeautifulSoup(str(result[0]),?'lxml')
title?=?bf2.div.div.h1.string
pagenum?=?bf2.find_all(class_='size')
pagenum?=?BeautifulSoup(str(pagenum),?'lxml').span.string
pagepattern?=?re.compile('頁(yè)數(shù):(\d+)頁(yè)')
num?=?int(pagepattern.findall(pagenum)[0])
print('文章標(biāo)題:%s'?%?title)
print('如升文章頁(yè)數(shù):%d'?%?num)
while?True:
num?=?num?/?5.0
html?=?driver.page_source
bf1?=?BeautifulSoup(html,?'lxml')
result?=?bf1.find_all(class_='rtcspage')
for?each_result?in?result:
bf2?=?BeautifulSoup(str(each_result),?'lxml')
texts?=?bf2.find_all('p')
for?each_text?in?texts:
main_body?=?BeautifulSoup(str(each_text),?'lxml')
for?each?in?main_body.find_all(True):
if?each.name?==?'span':
print(each.string.replace('\xa0',''),end='')
elif?each.name?==?'br':
print('')
print('\n')
if?num??1:
page?=?driver.find_elements_by_xpath("http://div[@class='page']")
driver.execute_script('arguments[0].scrollIntoView();',?page[-1])?#拖動(dòng)到可見的元素去
nextpage?=?driver.find_element_by_xpath("http://a[@data-fun='next']")
nextpage.click()
time.sleep(3)
else:
break
執(zhí)行代碼,chromedriver自動(dòng)為你打開chrome瀏覽器,此時(shí)你翻頁(yè)到最后,點(diǎn)擊閱讀更多,然后等一段時(shí)間后關(guān)閉瀏覽器,代碼繼續(xù)執(zhí)行。
python爬蟲怎么獲取動(dòng)態(tài)的網(wǎng)頁(yè)源碼
一個(gè)月前實(shí)習(xí)導(dǎo)師布置任務(wù)說通過網(wǎng)絡(luò)爬蟲獲取深圳市氣橡差含象局發(fā)布的降雨數(shù)據(jù),網(wǎng)頁(yè)如下:
心想,爬蟲不太難的,當(dāng)年跟zjb爬煎蛋網(wǎng)無(wú)(mei)聊(zi)圖的時(shí)候,多么清高。由于接受任務(wù)后的一個(gè)月考試加作業(yè)一大堆,導(dǎo)師也不催,自己也不急。
但是,導(dǎo)師等我一個(gè)月都得讓我來寫意味著這東西得有多難吧。。。今天打開一看的確是這樣。網(wǎng)站是基于Ajax寫的,數(shù)據(jù)動(dòng)態(tài)獲取,所以無(wú)法通過下載源代碼然后解析獲得。
從某不良少年寫的抓取淘寶mm的例子中收到啟發(fā),對(duì)于這樣的情況,一般可以同構(gòu)自己搭建瀏覽器實(shí)現(xiàn)。phantomJs,CasperJS都是不錯(cuò)的選擇。
導(dǎo)師的要求是獲取過去一年內(nèi)深圳每個(gè)區(qū)每個(gè)站點(diǎn)每小時(shí)的降雨量,執(zhí)行該操作需要通過如上圖中的歷史查詢實(shí)現(xiàn),即通過一個(gè)時(shí)間來查詢,而這個(gè)時(shí)間存放在一個(gè)hidden類型的input標(biāo)簽里,當(dāng)然可以通過js語(yǔ)句將其改為text類型,然后執(zhí)行send_keys之類的操作。然而,我失敗了。時(shí)間可以修改設(shè)置,可是結(jié)果如下圖。
為此,僅抓取實(shí)時(shí)數(shù)據(jù)。選取python的selenium,模擬搭建瀏覽器,模擬人為的點(diǎn)擊等操作實(shí)現(xiàn)數(shù)據(jù)生成和獲取。selenium的一大優(yōu)點(diǎn)就是能獲取網(wǎng)頁(yè)渲染后的源代碼,即執(zhí)行操作后的源代碼梁笑。普通的通過 url解析網(wǎng)頁(yè)的方式只能獲取給定的數(shù)據(jù)慶哪,不能實(shí)現(xiàn)與用戶之間的交互。selenium通過獲取渲染后的網(wǎng)頁(yè)源碼,并通過豐富的查找工具,個(gè)人認(rèn)為最好用的就是find_element_by_xpath("xxx"),通過該方式查找到元素后可執(zhí)行點(diǎn)擊、輸入等事件,進(jìn)而向服務(wù)器發(fā)出請(qǐng)求,獲取所需的數(shù)據(jù)。
[python]?view plain?copy
#?coding=utf-8
from?testString?import?*
from?selenium?import?webdriver
import?string
import?os
from?selenium.webdriver.common.keys?import?Keys
import?time
import?sys
default_encoding?=?'utf-8'
if?sys.getdefaultencoding()?!=?default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
district_navs?=?['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']
district_names?=?['福田區(qū)','羅湖區(qū)','南山區(qū)','鹽田區(qū)','寶安區(qū)','龍崗區(qū)','光明新區(qū)','坪山新區(qū)','龍華新區(qū)','大鵬新區(qū)']
flag?=?1
while?(flag??0):
driver?=?webdriver.Chrome()
driver.get("hianCe/")
#?選擇降雨量
driver.find_element_by_xpath("http://span[@id='fenqu_H24R']").click()
filename?=?time.strftime("%Y%m%d%H%M",?time.localtime(time.time()))?+?'.txt'
#創(chuàng)建文件
output_file?=?open(filename,?'w')
#?選擇行政區(qū)
for?i?in?range(len(district_navs)):
driver.find_element_by_xpath("http://div[@id='"?+?district_navs[i]?+?"']").click()
#?print?driver.page_source
timeElem?=?driver.find_element_by_id("time_shikuang")
#輸出時(shí)間和站點(diǎn)名
output_file.write(timeElem.text?+?',')
output_file.write(district_names[i]?+?',')
elems?=?driver.find_elements_by_xpath("http://span[@onmouseover='javscript:changeTextOver(this)']")
#輸出每個(gè)站點(diǎn)的數(shù)據(jù),格式為:站點(diǎn)名,一小時(shí)降雨量,當(dāng)日累積降雨量
for?elem?in?elems:
output_file.write(AMonitorRecord(elem.get_attribute("title"))?+?',')
output_file.write('\n')
output_file.close()
driver.close()
time.sleep(3600)
文件中引用的文件testString只是修改輸出格式,提取有效數(shù)據(jù)。
[python]?view plain?copy
#Encoding=utf-8
def?OnlyCharNum(s,?oth=''):
s2?=?s.lower()
fomart?=?'abcdefghijklmnopqrstuvwxyz0123456789,.'
for?c?in?s2:
if?not?c?in?fomart:
s?=?s.replace(c,?'')
return?s
def?AMonitorRecord(str):
str?=?str.split(":")
return?str[0]?+?","?+?OnlyCharNum(str[1])
一小時(shí)抓取一次數(shù)據(jù),結(jié)果如下:
selenium網(wǎng)頁(yè)源碼xml解析的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于selenium 獲取html、selenium網(wǎng)頁(yè)源碼xml解析的信息別忘了在本站進(jìn)行查找喔。
掃描二維碼推送至手機(jī)訪問。
版權(quán)聲明:本文由河南新鄉(xiāng)捷東實(shí)業(yè)有限公司發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。