900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python爬取数据案例分析_基于Python及webdriver的网页抓取案例

python爬取数据案例分析_基于Python及webdriver的网页抓取案例

时间:2019-04-24 18:28:33

相关推荐

python爬取数据案例分析_基于Python及webdriver的网页抓取案例

上次有朋友问怎么抓取交易所网站的数据,特别是历史数据,这里特别推荐使用selenium这一自动化测试框架。

原本selenium是用来完成大量基于浏览器的自动化测试的,但由于可以方便地执行JS代码,摸拟用户点击和操作,

因此可以与PYTHON结合实现一些稍微复杂一点的网页抓取操作。

下面就以抓取交易所网站的统计数据为例,说明两者结合的一些用法。

跟普通的抓取操作相比,稍微复杂一点的地方在于:

1)如下图所示,默认抓取上交所网页数据只能取到最近一个工作日的统计数据,如果想取过去的数据,只能人工点击日历控件完成日期选择,不能输入,因此必须:

a)去掉日期元素的只读属性

b)清空原有日期值,设置想读取的日期值

c)由于页面有延迟加载的情况,因此必须在合适的点设定一定的等待时间

#encoding:utf8

"""

@author:xuyuming

@contact:283548048@

@time:/8/8 22:47

"""

fromseleniumimportwebdriver

importtime

###############################取深交所相关统计数据#################################################

driver=webdriver.Chrome()

driver.get("/main/marketdata/tjsj/jyjg/")

#抓取上交所交易日历数据

driver.find_element_by_name("txtDate").clear()

#设置统计数据的数据日期

driver.find_element_by_name("txtDate").send_keys("-08-05")

#点击查询按钮

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

##################################取上交所相关统计数据###############################################

#remove readonly attribute

driver=webdriver.Chrome()

driver.get("/market/stockdata/overview/day/")

#等待一秒钟,确保页面加载完毕,以便于后续修改DOM元素只读属性后不会被页面延迟加载后覆盖

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']")

#清除内容

setDatElement.clear()

#重新填上指定的值

setDatElement.send_keys("-08-05")

#点击“查询”按钮

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()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。