python爬取数据案例分析_基于Python及webdriver的网页抓取案例
上次有朋友問(wèn)怎么抓取交易所網(wǎng)站的數(shù)據(jù),特別是歷史數(shù)據(jù),這里特別推薦使用selenium這一自動(dòng)化測(cè)試框架。
原本selenium是用來(lái)完成大量基于瀏覽器的自動(dòng)化測(cè)試的,但由于可以方便地執(zhí)行JS代碼,摸擬用戶點(diǎn)擊和操作,
因此可以與PYTHON結(jié)合實(shí)現(xiàn)一些稍微復(fù)雜一點(diǎn)的網(wǎng)頁(yè)抓取操作。
下面就以抓取交易所網(wǎng)站的統(tǒng)計(jì)數(shù)據(jù)為例,說(shuō)明兩者結(jié)合的一些用法。
跟普通的抓取操作相比,稍微復(fù)雜一點(diǎn)的地方在于:
1)如下圖所示,默認(rèn)抓取上交所網(wǎng)頁(yè)數(shù)據(jù)只能取到最近一個(gè)工作日的統(tǒng)計(jì)數(shù)據(jù),如果想取過(guò)去的數(shù)據(jù),只能人工點(diǎn)擊日歷控件完成日期選擇,不能輸入,因此必須:
a)去掉日期元素的只讀屬性
b)清空原有日期值,設(shè)置想讀取的日期值
c)由于頁(yè)面有延遲加載的情況,因此必須在合適的點(diǎn)設(shè)定一定的等待時(shí)間
#encoding:utf8
"""
@author:xuyuming
@contact:283548048@qq.com
@time:2016/8/8 22:47
"""
fromseleniumimportwebdriver
importtime
###############################取深交所相關(guān)統(tǒng)計(jì)數(shù)據(jù)#################################################
driver=webdriver.Chrome()
driver.get("http://www.szse.cn/main/marketdata/tjsj/jyjg/")
#抓取上交所交易日歷數(shù)據(jù)
driver.find_element_by_name("txtDate").clear()
#設(shè)置統(tǒng)計(jì)數(shù)據(jù)的數(shù)據(jù)日期
driver.find_element_by_name("txtDate").send_keys("2016-08-05")
#點(diǎn)擊查詢按鈕
driver.find_element_by_id("1804_tab1_btn").click()
time.sleep(1)
#股票總成交金額 ,從CHROME自帶的“檢查”功能獲取XPATH路徑為 //*[@id="REPORTID_tab1"]/tbody/tr[2]/td[3]
total_tradeamt=driver.find_element_by_xpath("//*[@id='REPORTID_tab1']/tbody/tr[2]/td[3]").text
#股票總流通市值 //*[@id="REPORTID_tab1"]/tbody/tr[2]/td[8]
negotiableValue=driver.find_element_by_xpath('//*[@id="REPORTID_tab1"]/tbody/tr[2]/td[8]').text
#b股總成交金額
tradeamtB=driver.find_element_by_xpath('//*[@id="REPORTID_tab1"]/tbody/tr[4]/td[3]').text
#b股總流通市值
negotiableValueB=driver.find_element_by_xpath('//*[@id="REPORTID_tab1"]/tbody/tr[4]/td[8]').text
driver.quit()
# 深市A股總流通市值為深市總市值減去深市B股總市值
negotiableValueA_sz=int(negotiableValue.replace(',',''))-int(negotiableValueB.replace(',',''))
# 深市A股總成交額為深市總成交額減去深市B股總成交額
tradeamtA_sz=int(total_tradeamt.replace(',',''))-int(tradeamtB.replace(',',''))
#打印A股流通市值和成交金額
printnegotiableValueA_sz,tradeamtA_sz
##################################取上交所相關(guān)統(tǒng)計(jì)數(shù)據(jù)###############################################
#remove readonly attribute
driver=webdriver.Chrome()
driver.get("http://www.sse.com.cn/market/stockdata/overview/day/")
#等待一秒鐘,確保頁(yè)面加載完畢,以便于后續(xù)修改DOM元素只讀屬性后不會(huì)被頁(yè)面延遲加載后覆蓋
time.sleep(1)
#去掉元素的只讀屬性
driver.execute_script("var setDate=document.getElementById('start_date2');setDate.removeAttribute('readonly');")
#定位到日期控件
setDatElement=driver.find_element_by_xpath("//input[@id='start_date2']")
#清除內(nèi)容
setDatElement.clear()
#重新填上指定的值
setDatElement.send_keys("2016-08-05")
#點(diǎn)擊“查詢”按鈕
driver.find_element_by_id("btnQuery").click()
time.sleep(1)
negotiableValueA_sh=driver.find_element_by_xpath('//*[@id="tableData_934"]/div[2]/table/tbody/tr[3]/td[3]/div').text
#取最新的滬市A股成交金額 //*[@id="tableData_934"]/div[2]/table/tbody/tr[5]/td[3]/div
trdAmtA_sh=driver.find_element_by_xpath('//*[@id="tableData_934"]/div[2]/table/tbody/tr[5]/td[3]/div').text
#取最新的滬市A股平均市盈率
profitRateA_sh=driver.find_element_by_xpath('//*[@id="tableData_934"]/div[2]/table/tbody/tr[7]/td[3]/div').text
#打印滬市成交金額 ,流通市值以及整體市盈率
printnegotiableValueA_sh,trdAmtA_sh,profitRateA_sh
driver.quit()
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的python爬取数据案例分析_基于Python及webdriver的网页抓取案例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 这几年激光电视哪个品牌做的好?海信激光电
- 下一篇: 《博德之门 3》4 号正式补丁上线,包含