使用python的selenium爬取AJAX动态网站实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用python的selenium爬取AJAX动态网站实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含38993字,纯文字阅读大概需要56分钟。
内容图文
使用python的selenium爬取AJAX动态网站实例
一、如何判断一个网站的资源是AJAX动态更新
? 打开目标网址(本例使用巨潮资讯网站做学习交流使用)http://www.cninfo.com.cn/new/commonUrl?url=disclosure/list/notice#sseMain在浏览器右键->检查元素或使用快捷键f12,选择network->XHR,会看到这样的页面。目前泽里没有任何东西
刷新网页后就会显示所有使用AJAX的动态资源。
这里需要进行寻找分析,比如我需要爬取代码、简称、公告标题、公告时间的所有内容,最后在disclosure中看到了我想过要的资源。
查看请求头信息,发现存在X-Requested-With: XMLHttpRequest这里的XMLHttpRequest便是AJAX实现异步资源更新的方法。自此便可以判断需要爬取的内容是动态资源,需要使用selenium进行爬取。
二、python实现
from selenium import webdriver
import pandas as pd
import time
url = 'http://www.cninfo.com.cn/new/commonUrl?url=disclosure/list/notice#sseMain'
driver = webdriver.Firefox(executable_path='D:\develop\geckodriver.exe')
driver.get(url)
driver.implicitly_wait(10)
time.sleep(10)
items = []
title = ['code', 'name', 'title', 'link', 'time']
def bug():
driver.find_element_by_xpath('//*[@id="pane-1"]/div[1]/div/div[3]/table/tbody')
tr_count = len(driver.find_elements_by_tag_name('tr')) - 1 # 获取这一页一共有多少条数据,如果30条返回32 减一为了range()
for i in range(1, tr_count):
code = driver.find_element_by_xpath(
'//*[@id="pane-1"]/div[1]/div/div[3]/table/tbody/tr[' + str(i) + ']/td[1]/div/a/span')
name = driver.find_element_by_xpath(
'//*[@id="pane-1"]/div[1]/div/div[3]/table/tbody/tr[' + str(i) + ']/td[2]/div/a/span')
title = driver.find_element_by_xpath(
'//*[@id="pane-1"]/div[1]/div/div[3]/table/tbody/tr[' + str(i) + ']/td[3]/div/a')
link = driver.find_element_by_xpath(
'//*[@id="pane-1"]/div[1]/div/div[3]/table/tbody/tr[' + str(i) + ']/td[3]/div/a').get_attribute('href')
time = driver.find_element_by_xpath(
'//*[@id="pane-1"]/div[1]/div/div[3]/table/tbody/tr[' + str(i) + ']/td[4]/div/span')
print(code.text, name.text, title.text, link, time.text)
items.append([code.text, name.text, title.text, link, time.text])
def repeat():
for j in range(39, 42):
if j > 4:
if j == 41:
button = driver.find_element_by_xpath('//*[@id="main"]/div[2]/div[1]/div[1]/div[3]/div/ul/li[6]')
button.click()
print("=" * 30 + "第" + str(j) + "页" + "=" * 30)
bug()
else:
button = driver.find_element_by_xpath(
'/html/body/div[2]/div/div[2]/div[1]/div[1]/div[3]/div/ul/li[5]')
button.click()
print("=" * 30 + "第" + str(j) + "页" + "=" * 30)
bug()
else:
button = driver.find_element_by_xpath(
'/html/body/div[2]/div/div[2]/div[1]/div[1]/div[3]/div/ul/li[' + str(j) + ']')
button.click()
print("=" * 30 + "第" + str(j) + "页" + "=" * 30)
bug()
file = pd.DataFrame(columns=title, data=items)
file.to_csv('D:\develop\巨潮资讯_沪主板.csv')
repeat()
程序思路:
? 通过selenium进行渲染,将动态资源渲染到浏览器中,再通过xpath选择器进行选取所需要的元素。最后将内容保存到列表中,并保存为.csv文件。
翻页的细节由于该网页的设计,前4页的点击操作、第5页到第40页的点击操作、最后一页(目前是41页)的点击操作分别位于不同的xpath路径中所以需要进行if判断。并且最后一页显示的条数与前边页的条数不同(目前,满页为30条,最后一页不满为7条),需要进行获取每一页的条数,实现逻辑就是判断tbody中有多少tr标签。
模拟翻页:
xpath选择器的获取:
之前使用过scrapy爬取,但是得到response.text中是不存在我所需要的资源的。这是当时response.text中的内容,可以跳过不看
<!DOCTYPE html>
<html lang="zh-CN">
<!-- 公共头部样式 -->
<head>
<meta charset="utf-8">
<meta name="format-detection" content="telephone=no">
<meta name="author" content="深圳证券信息有限公司">
<meta name="renderer" content="webkit">
<meta name="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, minimum-scale=1.0,maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-title" content="深圳证券信息有限公司">
<meta name="keywords" content="巨潮资讯网、巨潮网、巨潮资讯、上市公司公告、巨潮、信息披露、法定披露、披露、创业板、中小板、基金、债券、财务数据、网络投票、互动易"/>
<meta name="description" content="巨潮资讯网是中国证监会指定的上市公司信息披露网站,平台提供上市公司公告、公司资讯、公司互动、股东大会网络投票等内容功能,一站式服务资本市场投资者。">
<title>巨潮资讯网</title>
<link rel="shortcut icon" href="http://static.cninfo.com.cn/new/img/favicon.ico" type="image/x-icon"/>
<link rel="stylesheet" href="http://static.cninfo.com.cn/new/assets/css/common.css?v=20201218045204">
<link rel="stylesheet" href="/new/assets/font/iconfont.css?v=20201218045204">
<link rel="stylesheet" href="/new/assets/lib/element.css?v=20201218045204">
<script>
//外部资源路径配置 详情参见properties/http_server_domain.properties
var apiServer = "http://api.cninfo.com.cn";//巨潮API域名
var cninfo_user_url = "http://uc.cninfo.com.cn";//用户中心
var cninfo_user_url_https = "https://owssso.szse.cn/sso";//用户认证中心
var path = "/new";//当前系统
// var path = "http://www.cninfo.com.cn/new";//当前系统
var web_chat = "http://webchat.cninfo.com.cn"
var video_url = "http://video.cninfo.com.cn"//摇号抽签
var cninfo_data20 = "http://www.cninfo.com.cn/data20"//添加
// cninfo_data20="http://iaptest.cninfo.com.cn";
var cninfo_data_url = "http://www.cninfo.com.cn/data";//数据模块
var webapi_server_url = "http://www.cninfo.com.cn/api-cloud-server/api";//数据中心测试接口地址
var res_cninfo_url = "http://static.cninfo.com.cn/new";//CDN域名/new
var v3_cninfo = "http://static.cninfo.com.cn";//主域名,CDN域名(目前配置的为static.cninfo.com.cn)
var webapi_url = "http://webapi.cninfo.com.cn";//数据超市API中心域名
var irmApi = "http://irm.cninfo.com.cn";//互动易API域名
var pgtype = ""; // 公告页tab类型
var officeUrl = "http://view.officeapps.live.com/op/view.aspx?src=";
var userConfig_url = "https://www.szse.cn/application/passCenter/pass/"; // 用户设置页面地址
var PAGE_TYPE = "secondScrollhd";
// var SCORLL_HT = 220;
var isTalkingDateEnable = "true";//用户行为分析js是否启用
var talkingDateAppkey = "28F70D21C62B4B6396DE05F9EF7DC68F";//用户行为分析appKey
var talkingDateUrl = "https://pub.szse.cn/g/w";//用户行为分析请求地址
</script>
<script src="http://static.cninfo.com.cn/new/assets/lib/td-pc-website-sdk.js?v=20201218045204"></script>
<script src="http://static.cninfo.com.cn/new/assets/lib/axios.min.js?v=20201218045204"></script>
<script src="http://static.cninfo.com.cn/new/assets/lib/vue.min.js?v=20201218045204"></script>
<script src="http://static.cninfo.com.cn/new/assets/lib/element.js?v=20201218045204"></script>
<script src="http://static.cninfo.com.cn/new/assets/js/common.js?v=20201218045204"></script>
<script defer="defer" src="http://static.cninfo.com.cn/new/assets/font/iconfont.js?v=20201218045204"></script>
<link rel="stylesheet" href="http://static.cninfo.com.cn/new/assets/css/notice/common.css?v=20201127121111">
</head>
<body>
<!-- 头部 -->
<header class="transparent-hd is-fixed">
<div class="jc-layout-ms clearfix">
<div class="logo-wrap">
<a href="/new/index">
<img class="logo not-hd-img" width="100" height="45" src="http://static.cninfo.com.cn/new/assets/image/logo.png" alt="">
<img class="logo hd-img" width="100" height="45" src="http://static.cninfo.com.cn/new/assets/image/logo3.png" alt="">
<img class="slogan not-hd-img" width="150" height="45" src="http://static.cninfo.com.cn/new/assets/image/slogan.png" alt="">
<img class="slogan hd-img" width="150" height="45" src="http://static.cninfo.com.cn/new/assets/image/slogan2.png" alt="">
</a>
</div>
<div class="nav-wrap">
<ul class="jc-list">
<li class="f18 p-hover ">
<a class="pointer" href="/new/index">首页</a>
</li>
<li class="f18 p-hover">
<a>公告</a>
<div class="drop-menu jc-shadow-2">
<div class="jc-layout">
<ul class="jc-list">
<li>
<a onclick="eventTracker('顶部公告_深市')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#szse">深市</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_深主板')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#szseMain">深主板</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_中小板')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#szseSme">中小板</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_创业板')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#szseGem">创业板</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_沪市')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#sse">沪市</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_沪主板')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#sseMain">沪主板</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_科创板')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#sseKcp">科创板</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_基金')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#fund">基金</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_债券')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#bond">债券</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_港股')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#hke/1_hkeMain">港股</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_三板')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#third/1_newThree">三板</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_监管')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#regulator">监管</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_调研')" class="p-hover reloadPage " href="/new/commonUrl?url=disclosure/list/notice#dy%2F1">调研</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_注册制')" class="p-hover" href="/new/commonUrl?url=disclosure/ipo/register">注册制</a>
</li>
<li>
<a onclick="eventTracker('顶部公告_摇号抽签')" class="p-hover" href="/new/lottery/commonUrl?url=disclosure/lotteryList">摇号抽签</a>
</li>
</ul>
</div>
</div>
</li>
<li class="f18 p-hover">
<a>资讯</a>
<div class="drop-menu jc-shadow-2">
<div class="jc-layout">
<ul class="jc-list">
<li>
<a onclick="eventTracker('顶部资讯_个股资讯')" class="p-hover" href="/new/disclosure/stock?tabName=data&f002v=001001&stockCode=000002&type=info">个股资讯</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_公开信息')" class="p-hover" href="/new/commonUrl?url=data/public-information">公开信息</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_融资融券')" class="p-hover" href="/new/commonUrl?url=data/rzrq-zjlx#rzrq">融资融券</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_大宗交易')" class="p-hover" href="/new/commonUrl?url=data/dzjy">大宗交易</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_限售解禁')" class="p-hover" href="/new/commonUrl?url=data/person-stock-data-tables#xsjj">限售解禁</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_公司要览')" class="p-hover" href="/new/snapshot/companyListCn">公司要览</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_停复牌')" class="p-hover" href="/new/commonUrl?url=disclosure/stopResumeTrading">停复牌</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_交易提示')" class="p-hover" href="/new/commonUrl?url=disclosure/tradingTips">交易提示</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_终止/退市')" class="p-hover" href="/new/commonUrl?url=data/person-stock-data-tables#zzts">终止/退市</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_预约披露')" class="p-hover" href="/new/commonUrl?url=data/yypl" title="预约披露">预约披露</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_新股发行')" class="p-hover" href="/new/commonUrl?url=disclosure/ipo/area" title="新股发行">新股发行</a>
</li>
<li>
<a onclick="eventTracker('顶部资讯_IPO招股书')" class="p-hover" href="/new/commonUrl?url=disclosure/ipo/list" title="IPO招股书">IPO招股书</a>
</li>
</ul>
</div>
</div>
</li>
<li class="f18 p-hover">
<a>数据</a>
<div class="drop-menu jc-shadow-2">
<div class="jc-layout">
<ul class="jc-list">
<li>
<a onclick="eventTracker('顶部数据_数据平台')" class="p-hover" href="http://webapi.cninfo.com.cn" target="_blank">数据平台</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_数据商城')" class="p-hover" href="http://webapi.cninfo.com.cn/#/home/data-center" target="_blank">数据商城</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_智能公告')" class="p-hover" href="http://webapi.cninfo.com.cn/#/smartNotice" target="_blank">智能公告</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_上市公司嵌入')" class="p-hover" href="http://webapi.cninfo.com.cn/#/listedCompany" target="_blank">上市公司嵌入</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_英文产品')" class="p-hover" href="http://webapi.cninfo.com.cn/#/enDataServices" target="_blank">英文产品</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_专题统计')" class="p-hover" href="http://webapi.cninfo.com.cn/#/thematicStatistics" target="_blank">专题统计</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_数据浏览器')" class="p-hover" href="http://webapi.cninfo.com.cn/#/dataBrowse" target="_blank">数据浏览器</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_固定收益')" class="p-hover" href="http://webapi.cninfo.com.cn/#/bond" target="_blank">固定收益</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_金融科技')" class="p-hover" href="http://webapi.cninfo.com.cn/#/fintech" target="_blank">金融科技</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_数据API')" class="p-hover" href="http://webapi.cninfo.com.cn/#/apiDoc" target="_blank">数据API</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_企业图谱')" class="p-hover" href="http://webapi.cninfo.com.cn/#/qiyetupu" target="_blank">企业图谱</a>
</li>
<li>
<a onclick="eventTracker('顶部数据_行情中心')" class="p-hover" href="http://webapi.cninfo.com.cn/#/marketData" target="_blank">行情中心</a>
</li>
</ul>
</div>
</div>
</li>
<li class="f18 p-hover">
<a>服务</a>
<div class="drop-menu jc-shadow-2">
<div class="jc-layout">
<ul class="jc-list">
<li>
<a class="p-hover" href="http://irm.cninfo.com.cn" target="_blank">互动易</a>
</li>
<li>
<a class="p-hover" href="http://wltp.cninfo.com.cn/gddh_vote/vote/index.do" target="_blank">网络投票</a>
</li>
<li>
<a class="p-hover" href="http://www.cnindex.com.cn/" target="_blank">国证指数</a>
</li>
<li>
<a class="p-hover" href="http://www.szsi.cn/cpfw/fwsq/hq/index.htm" target="_blank">行情授权</a>
</li>
<li>
<a class="p-hover" href="http://webapi.cninfo.com.cn" target="_blank">深证信数据服务平台</a>
</li>
</ul>
</div>
</div>
</li>
</ul>
</div>
<div class="handle-wrap">
<span class="nolog">
<a class="login" href="https://owssso.szse.cn/sso/login?locale=zh&service=http://uc.cninfo.com.cn/api/callback?client_name=CasClient">登录</a>
<a href="http://www.szse.cn/application/register/?source=http://uc.cninfo.com.cn/user/passport&locale=zh" class="register">注册</a>
</span>
<span class="logged">
<img class="avator-img" src="http://static.cninfo.com.cn/new/assets/image/default-avatar.png" width="32" height="32">
<a class="logged-name ell " href="http://uc.cninfo.com.cn"> </a>
<a class="logout" onclick="logout()">退出</a>
</span>
</div>
<div id="noticeTipId" v-cloak @click="readNewsStatus" v-show="display">
<el-popover placement="bottom" width="300" v-model="visible">
<div>
<div style="overflow:hidden;padding-bottom:10px;border-bottom: 1px solid #d9d9d9">
<span style="font-weight:600;font-size:16px;float:left;">站内消息</span>
<span class="cursor_pointer" @click="visible=false" style="float:right">x</span>
</div>
<div>
<ul>
<li
class="cursor_pointer"
style="padding: 10px 0;border-bottom: 1px solid #eeeeee;overflow:hidden;"
@click="toRouter('/self_gg')"
>
<span style="float:left">最新公告</span>
<span style="float:right">
更新{{newsNew&&newsNew.announce}}条
<span
style="color:#9098a3"
class="el-icon-arrow-right"
></span>
</span>
</li>
<li
class="cursor_pointer"
style="padding: 10px 0;border-bottom: 1px solid #eeeeee;overflow:hidden;"
@click="toRouter('/self_data', '公开信息')"
>
<span style="float:left">公开信息</span>
<span style="float:right">
更新{{newsNew&&newsNew.publicInfo}}条
<span
style="color:#9098a3"
class="el-icon-arrow-right"
></span>
</span>
</li>
<li
class="cursor_pointer"
style="padding: 10px 0;border-bottom: 1px solid #eeeeee;overflow:hidden;"
@click="toRouter('/self_data', '业绩预告')"
>
<span style="float:left">业绩预告</span>
<span style="float:right">
更新{{newsNew&&newsNew.performanceForecast}}条
<a
style="color:#9098a3"
class="el-icon-arrow-right"
></a>
</span>
</li>
<li
class="cursor_pointer"
style="padding: 10px 0;border-bottom: 1px solid #eeeeee;overflow:hidden;"
@click="toRouter('/self_data', '大宗交易')"
>
<span style="float:left">大宗交易</span>
<span style="float:right">
更新{{newsNew&&newsNew.ints}}条
<span
style="color:#9098a3"
class="el-icon-arrow-right"
></span>
</span>
</li>
<li
class="cursor_pointer"
style="padding: 10px 0;border-bottom: 1px solid #eeeeee;overflow:hidden;"
@click="toRouter('/my_wd')"
>
<span style="float:left">我的问答</span>
<span style="float:right">
更新{{newsNew&&newsNew.myQuestion}}条
<span
style="color:#9098a3"
class="el-icon-arrow-right"
></span>
</span>
</li>
</ul>
</div>
</div>
<el-button type="text" slot="reference">
<span class="el-icon-bell"></span>
</el-button>
</el-popover>
<span class="dot" v-show="newsNew&&!newsNew.read"></span>
</div>
<div class="search-wrap">
<div class="top-search-1"></div>
</div>
</div>
</header>
<div class="second-hd-img">
<div class="jc-layout clearfix">
<h1>信息披露</h1>
<ul class="jc-list">
<a><i class="el-icon-location-outline"></i> 首页 / </a>
<a>披露 / </a>
<a>最新公告 </a>
</ul>
</div>
</div>
<div class="jc-main">
<div id="main" v-cloak>
<div class="tab-plate jc-shadow-2">
<div class="jc-layout">
<el-tabs class="jc-el-tabs jc-el-tab-1" v-model="actPlate" @tab-click="switchPlate">
<el-tab-pane v-for="(item,index) in plateTabList" :label="item.value" :name="item.key"></el-tab-pane>
</el-tabs>
</div>
</div>
<div class="jc-layout tab-ct">
<el-row :gutter="20">
<el-col :md="17">
<el-tabs class="jc-el-tabs jc-el-tab-2" :class="specialContentTab.indexOf(actContent) > -1 ? ' new-el-tabs': '' " v-model="actContent" @tab-click="switchContent">
<el-tab-pane v-if="contentTabList.length != 1" v-for="(item,index) in contentTabList" :label="item.value" :name="item.key">
</el-tab-pane>
</el-tabs>
<el-tabs class="jc-el-tabs link-tab-1" v-model="actContent" :before-leave="beforeSwitchContent" @tab-click="switchContent">
<el-tab-pane :name="announceName" v-loading="loading">
<div v-if="actPlate != 'fund'" class="el-table-box">
<el-table ref="notice-table" class="jc-list-table" :data="announceList" @sort-change="sortChange">
<template slot="empty">
<div v-if="announceList.length == 0 && loading">
加载中...
</div>
<div v-if="announceList.length == 0 && !loading" class="no-data">
<img src="http://static.cninfo.com.cn/new/img/announce/no-data.png" alt="">
<p>暂无数据!</p>
</div>
</template>
<el-table-column v-if="!specialAnnounce" width="100" prop="secCode" sortable="custom" label="代码">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkStock(scope.row)">
<span class="code">{{scope.row.secCode}}</span>
</a>
</template>
</el-table-column>
<el-table-column v-if="!specialAnnounce" width="150" prop="secName" label="简称">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkStock(scope.row)">
<span class="code">{{scope.row.secName}}</span>
</a>
</template>
</el-table-column>
<el-table-column prop="announcementTitle" :sortable="['regulator'].indexOf(actPlate) > -1 ? false : 'custom'" label="公告标题">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkLastPage(scope.row)">
{{ specialAnnounce ? (scope.row.secName ? scope.row.secName + ' : ' : '') + scope.row.announcementTitle : scope.row.announcementTitle}}
<span class="icon-f"><i class="iconfont" :class="[checkDocType(scope.row.adjunctType)]"></i></span>
</a>
</template>
</el-table-column>
<el-table-column width="150" align="left" prop="announcementTime" :sortable="['regulator'].indexOf(actPlate) > -1 ? false : 'custom'" label="公告时间">
<template slot-scope="scope">
<span class="date">{{fomatDate(scope.row.announcementTime, 'yyyy-MM-dd HH:mm')}}</span>
</template>
</el-table-column>
</el-table>
</div>
<div v-if="actPlate == 'fund'">
<div class="el-table-box">
<el-table :row-class-name="rowClassCbFun" @expand-change="expandRowChangeFund" ref="notice-table" class="jc-list-table" :data="announceList" @sort-change="sortChange">
<template slot="empty">
<div v-if="announceList.length == 0 && loading">
加载中...
</div>
<div v-if="announceList.length == 0 && !loading" class="no-data">
<img src="http://static.cninfo.com.cn/new/img/announce/no-data.png" alt="">
<p>暂无数据!</p>
</div>
</template>
<el-table-column type="expand"></el-table-column>
<el-table-column v-if="!specialAnnounce" width="100" prop="secCode" sortable="custom" label="代码">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkStock(scope.row)">
<span class="code">{{scope.row.secCode}}</span>
</a>
</template>
</el-table-column>
<el-table-column v-if="!specialAnnounce" width="150" prop="secName" label="简称">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkStock(scope.row)">
<span class="code">{{scope.row.secName}}</span>
</a>
</template>
</el-table-column>
<el-table-column prop="announcementTitle" :sortable="['regulator'].indexOf(actPlate) > -1 ? false : 'custom'" label="公告标题">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkLastPage(scope.row)">
{{ specialAnnounce ? (scope.row.secName ? scope.row.secName + ' : ' : '') + scope.row.announcementTitle : scope.row.announcementTitle}}
<span class="icon-f"><i class="iconfont" :class="[checkDocType(scope.row.adjunctType)]"></i></span>
</a>
<div class="fundNames" v-if="actPlate == 'fund' && scope.row.fundsList && scope.row.fundsList.length > 1 && scope.row.showFunds">
<br/>
<span class="relafund">关联基金:</span>
<div class="funds">
<el-tag class="jump-tag" :title="item.secname" v-for="(item,index) in scope.row.fundsList"><a :href="'/new'+ '/disclosure/stock?stockCode=' +item.seccode + '&orgId=' + item.ogrId">{{item.secname.length > 10 ? item.secname.slice(0,7) + '...' + item.secname.slice(item.secname.length -2,item.secname.length) : item.secname}}</a></el-tag>
</div>
</div>
</template>
</el-table-column>
<el-table-column width="150" align="left" prop="announcementTime" :sortable="['regulator'].indexOf(actPlate) > -1 ? false : 'custom'" label="公告时间">
<template slot-scope="scope">
<span class="date">{{fomatDate(scope.row.announcementTime, 'yyyy-MM-dd HH:mm')}}</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
</el-tab-pane>
<el-tab-pane name="important" v-loading="loading">
<div class="el-table-box">
<el-table ref="imp-notice-table" :row-class-name="rowClassCb" @expand-change="expandRowChange" :default-expand-all="expandAll" class="jc-list-table" :data="announceCards" @sort-change="sortChange">
<template slot="empty">
<div v-if="announceCards.length == 0 && loading">
加载中...
</div>
<div v-if="announceCards.length == 0 && !loading" class="no-data">
<img src="http://static.cninfo.com.cn/new/img/announce/no-data.png" alt="">
<p>暂无数据!</p>
</div>
</template>
<el-table-column type="expand">
</el-table-column>
<el-table-column v-if="!specialAnnounce" width="100" prop="secCode" sortable="custom" label="代码">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkStock(scope.row[0])">
<span class="code">{{scope.row[0].secCode}}</span>
</a>
</template>
</el-table-column>
<el-table-column v-if="!specialAnnounce" width="150" prop="secName" label="简称">
<template slot-scope="scope">
<a class="ahover" target="_blank" :href="linkStock(scope.row[0])">
<span class="code">{{scope.row[0].secName}}</span>
</a>
</template>
</el-table-column>
<el-table-column prop="announcementTitle" label="公告标题">
<template slot-scope="scope">
<a v-if="scope.row.showMore || item.important" v-for="item in scope.row" class="ahover tda" target="_blank" :href="linkLastPage(item)">
<span class="ell tdatitle" :title="item.announcementTitle">{{ item.announcementTitle}}</span>
<span class="icon-f"><i class="iconfont" :class="[checkDocType(item.adjunctType)]"></i></span>
</a>
</template>
</el-table-column>
<el-table-column width="150" align="left" prop="announcementTime" :sortable="['regulator'].indexOf(actPlate) > -1 ? false : 'custom'" label="公告时间">
<template slot-scope="scope">
<span v-if="scope.row.showMore || item.important" v-for="item in scope.row" class="date tda">{{fomatDate(scope.row[0].announcementTime, 'yyyy-MM-dd HH:mm')}}</span>
</template>
</el-table-column>
</el-table>
</div>
</el-tab-pane>
<el-tab-pane name="2" v-loading="loading">
<div class="el-table-box">
<div class="announce-item summary-list" v-for="(item,index) in summaryList">
<div class="hd">
<span class="title" :title="item.announcementTitle">
<a target="_blank" :href="linkLastPage(item)">
{{item.announcementTitle}}
</a>
</span>
<span v-show="specialSummary && (item.adjunctType != 'TXT' || item.adjunctType != '')" class="icon-f"><i class="iconfont" :class="[checkDocType(item.adjunctType)]"></i></span>
<span class="date">{{fomatDate(item.announcementTime)}}</span>
</div>
<div class="ct" v-if="item.adjunctType == 'TXT' || item.adjunctType == ''">
<div class="announce-tit">
<a target="_blank" :href="linkLastPage(item)">
<span v-html="!item.announcementContent? '暂无内容':item.announcementContent.substring(0,500)"></span>
</a>
</div>
</div>
<div class="fulltext">
<a class="stock-tag" :href="linkStock(item)">
{{item.secCode}} {{item.secName}}
</a>
<div class="tc" v-if="item.announcementContent ? item.announcementContent.length > 500 : false"><a target="_blank" :href="linkLastPage(item)">查看更多 <i class="el-icon-arrow-down"></i></a></div>
<a target="_blank" class="checkall ahover" :href="linkAssociatePage(item)">
<span class="icon-f"><i class="iconfont iconnotice-PDF1"></i></span>
查看全文
</a>
</div>
</div>
</div>
</el-tab-pane>
</el-tabs>
<div class="new-pagination bg-white" v-if="page.total !=0">
<el-pagination
background
layout="prev,pager,next"
@current-change="changePage"
:current-page="page.num"
:page-size="page.size"
pager-count="5"
:total="page.total"
>
</el-pagination>
<span class="total-box">{{closeTotal}}</span>
<span class="tab-notice">{{tabStatusMsg}}</span>
</div>
</el-col>
<el-col hidden-md-and-down :md="7">
<div class="jc-mod quick-mod">
<div class="jc-mod-hd">
<span class="tit">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icongonggaosucha"></use>
</svg>
</span>
</div>
<div class="jc-mod-bd jc-condition-form ">
<el-form class="jc-el-form" size="medium">
<el-form-item>
<el-date-picker
class="handle-datepicker"
v-model="date"
type="daterange"
align="left"
unlink-panels
value-format="yyyy-MM-dd"
:picker-options="pickerOption"
@change="dateChange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
</el-form-item>
<el-row :gutter="12">
<el-col v-if="actPlate != 'regulator'" :span="12">
<el-form-item class="kw-form-item">
<el-autocomplete
ref="autocomplete"
popper-class="my-keyword"
v-model.trim="stock"
:fetch-suggestions="stockSearch"
trigger-on-focus="false"
:placeholder="placeholder"
@select="handleSelect"
@blur="stockInputBlur"
:maxlength="24"
:debounce="200"
@mousedown.native="isIE9 ? mousedownChange($event) : null"
@keyup.native="isIE9 ? keydownChange($event) : null"
@mouseover.native="inputMouseOver"
>
<template slot-scope="item">
<el-row :gutter="10">
<el-col :span="6">
<span class="code">{{item.item.code}}</span>
</el-col>
<el-col :span="9">
<span class="type ell" :title="item.item.category">{{item.item.category}}</span>
</el-col>
<el-col :span="9">
<span class="name ell" :title="item.item.zwjc">{{item.item.zwjc}}</span>
</el-col>
</el-row>
</template>
</el-autocomplete>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-input :maxlength="24" v-model.trim="titleKeyword" @keyup.enter.native="enterQuery" placeholder="标题关键字"></el-input>
</el-form-item>
</el-col>
<el-col v-if="actPlate != 'dy'" :span="12">
<el-form-item v-show="categoryList.length > 0">
<el-popover placement="bottom" width="550" trigger="click">
<el-checkbox-group v-model="checkedCategory">
<el-checkbox v-for="(item,index) in categoryList" @change="checkChange(item, 'checkedCategory')" :label="item" :key="item.key"><span class="cate-checkbox-txt" :title="item.value">{{item.value}}</span>
</el-checkbox>
</el-checkbox-group>
<el-button slot="reference">分类<i class="el-icon-caret-bottom"></i></el-button>
</el-popover>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-show="industryList.length > 0">
<el-popover placement="bottom" width="550" trigger="click">
<el-checkbox-group v-model="checkedIndustry">
<el-checkbox v-for="item in industryList" @change="checkChange(item, 'checkedIndustry')" :label="item" :key="item.key"><span class="cate-checkbox-txt" :title="item.value">{{item.value}}</span>
</el-checkbox>
</el-checkbox-group>
<el-button slot="reference">行业<i class="el-icon-caret-bottom"></i></el-button>
</el-popover>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-show="placeList.length > 0">
<el-popover placement="bottom" width="150" trigger="click">
<el-checkbox-group v-model="checkedPlace">
<el-checkbox v-for="item in placeList" @change="checkChange(item, 'checkedPlace')" :label="item" :key="item.key"><span class="cate-checkbox-txt" :title="item.value">{{item.value}}</span>
</el-checkbox>
</el-checkbox-group>
<el-button slot="reference">上市地<i class="el-icon-caret-bottom"></i></el-button>
</el-popover>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-show="orgList.length > 0">
<el-popover placement="bottom" width="150" trigger="click">
<el-checkbox-group v-model="checkedOrg">
<el-checkbox v-for="item in orgList" @change="checkChange(item, 'checkedOrg')" :label="item" :key="item.key"><span class="cate-checkbox-txt" :title="item.value">{{item.value}}</span>
</el-checkbox>
</el-checkbox-group>
<el-button slot="reference">发文机构<i class="el-icon-caret-bottom"></i></el-button>
</el-popover>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-button class="query-btn" type="primary" @click="goToSearch('btn')">查询</el-button>
</el-row>
</el-form>
</div>
</div>
<div v-if="!(['regulator','hke','third','dy','zy'].indexOf(actPlate) > -1)" class="jc-mod ">
<div class="jc-mod-hd">
<span class="tit">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconkuaijiefenlei"></use>
</svg>
</span>
</div>
<div class="jc-mod-bd jc-condition-form">
<el-row v-if="['szse','szseMain','szseSme','szseGem','sse','sseMain','sseKcp'].indexOf(actPlate) > -1">
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_tszlq_szsh#' + actPlate + '/1'">
<i class="iconfont iconcategory_tszlq_szsh"></i>
<div>退市整理期</div>
</a>
</el-col>
<el-col v-for="(item, index) in quickSortList" v-if="index < 5" :span="8">
<a class="link-md" :href=" '/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=' + item.categoryEnName + '#' + actPlate + '/1' ">
<i class="iconfont iconelse" :class="'icon' + item.categoryEnName"></i>
<div>{{item.categoryName}}</div>
</a>
</el-col>
</el-row>
<el-row v-if="actPlate == 'fund'">
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_jjzm_jjgg#fund'">
<i class="iconfont iconcategory_jjzm_jjgg"></i>
<div>招募设立</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&bulletin=true#fund'">
<i class="iconfont icondingqibaogao"></i>
<div>定期报告</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_fecyr_jjgg#fund'">
<i class="iconfont iconcategory_fecyr_jjgg"></i>
<div>持有人大会</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_sgsh_jjgg#fund'">
<i class="iconfont iconcategory_sgsh_jjgg"></i>
<div>申购赎回</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_fh_jjgg#fund'">
<i class="iconfont iconfenhongzhuansong"></i>
<div>分红</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_jzgg_jjgg#fund'">
<i class="iconfont iconcategory_jzgg_jjgg"></i>
<div>净值</div>
</a>
</el-col>
</el-row>
<el-row v-if="actPlate == 'bond'">
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_zqfxss_zqgg#bond'">
<i class="iconfont iconcategory_zqfxss_zqgg"></i>
<div>发行上市</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_zqdq_zqgg#bond'">
<i class="iconfont icondingqibaogao1"></i>
<div>定期报告</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_zqfx_zqgg#bond'">
<i class="iconfont iconcategory_zqfx_zqgg"></i>
<div>付息公告</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_zqdqdftz_zqgg#bond'">
<i class="iconfont iconcategory_zqdqdftz_zqgg"></i>
<div>兑付公告</div>
</a>
</el-col>
<el-col :span="8">
<a class="link-md" :href="'/new' + '/commonUrl/pageOfSearch?url=disclosure/list/search&checkedCategory=category_zqqt_zqgg#bond'">
<i class="iconfont iconcategory_zqqt_zqgg"></i>
<div>其他公告</div>
</a>
</el-col>
</el-row>
</div>
</div>
<div class="jc-mod ">
<div class="jc-mod-hd">
<span class="tit">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#iconremenjiansuo"></use>
</svg>
</span>
</div>
<div class="jc-mod-bd jc-condition-form">
<el-tag
class="jump-tag"
v-for="item in hotTag"
:key="item.word"
type="info"
effect="plain">
<span class="p-color">#</span>
<a :href="'/new' + '/fulltextSearch?keyWord=' + item.word">{{item.word}}</a>
</el-tag>
</div>
</div>
<div>
<a :href="nxtADPic.txtPath ? nxtADPic.txtPath : ''">
<img v-if="nxtADPic.path" class="mod-ad-img" width="420" height="160" :src="'http://static.cninfo.com.cn' + nxtADPic.path">
</a>
</div>
</el-col>
</el-row>
<el-row>
<el-col :md="17">
<div class="attention">
<p>温馨提示: 阅览公告敬请您安装
<a target="_blank" href="https://acrobat.adobe.com/cn/zh-Hans/products/pdf-reader.html">
<span class="icon-f" style="margin-left: 0px;">
<i class="iconfont iconnotice-PDF1" style="color: #cc8b14;"></i>
</span>
</a> 软件。
</p>
</div>
</el-col>
</el-row>
</div>
</div>
</div>
<div class="right-bar">
<ul>
<li class="item">
<a onclick="eventTracker('首页_侧边栏公告');" href="/new/commonUrl/pageOfSearch?url=disclosure/list/search">
<i class="iconfont icongonggao"></i>
<div>公告</div>
</a>
</li>
<li class="item">
<a onclick="eventTracker('首页_侧边栏提问');" class="my-question" href="javascript:;">
<i class="iconfont icontiwen"></i>
<div>互动</div>
</a>
</li>
<li class="item">
<a onclick="eventTracker('首页_侧边栏订阅');" class="my-subs" href="javascript:;">
<i class="iconfont icondingyue"></i>
<div>订阅</div>
</a>
</li>
<li v-cloak id="feedback" class="item">
<a @click="openDialog">
<i class="iconfont iconfankui"></i>
<div>反馈</div>
</a>
<el-dialog :append-to-body="true" top="25vh" title="反馈意见" :visible.sync="dialogVisible" width="45%">
<div>
<el-form>
<el-form-item>
<el-input type="textarea" maxlength="300" v-model="msg" placeholder="请输入您的意见建议..." :rows="7"></el-input>
</el-form-item>
</el-form>
</div>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click.stop.native="dialogVisible = false">取消</el-button>
<el-button size="small" @click.stop.native="confirmDialog" type="primary">确认</el-button>
</span>
</el-dialog>
</li>
</ul>
<div class="backtop item">
<a>
<i class="iconfont iconhuidingbu"></i>
<div>回顶部</div>
</a>
</div>
</div>
<div id="loginWrapper" class="login-wrapper">
<div class="login-box" style="max-width:430px;margin:0 auto;top: 200px;">
<iframe id="login_iframe" style="width:100%;height: 525px;" frameborder="0"></iframe>
<div class="close-login-btn"><i class="iconfont iconshanchu"></i></div>
</div>
</div>
<footer>
<div class="jc-layout clearfix ft-inner">
<div class="company-info">
<p class="f-txt">关于我们</p>
<div>巨潮资讯网由深圳证券交易所全资子公司深圳证券信息有限公司运营,是深交所法定信息披露平台,平台自成立以来始终致力于保护投资者的知情权和参与权,为投资者提供一站式的证券市场信息服务。</div>
<ul class="jc-list ft-logo">
<li class="sep-line relative">
<a target="_blank" href="http://www.szsi.cn/gywm/gsjs/gsjj/">
<img width="164" height="32" src="/new/assets/image/c-logo.png" alt="">
</a>
</li>
<li>
<a target="_blank" href="http://www.szsi.cn/cpfw/jczxw/">
<img width="70" height="32" src="/new/assets/image/logo2.png" alt="">
</a>
</li>
</ul>
</div>
<div class="friend-links">
<p class="f-txt">友情链接</p>
<ul class="jc-list">
<li>
<a class="f-hover" target="_blank" href="http://www.szse.cn/">深圳证券交易所</a>
<a class="f-hover" target="_blank" href="http://www.sse.com.cn/">上海证券交易所</a>
<a class="f-hover" target="_blank" href="http://www.szsi.cn/">深圳证券信息有限公司</a>
</li>
<li>
<a class="f-hover" target="_blank" href="http://www.cnindex.com.cn/">国证指数</a>
<a class="f-hover" target="_blank" href="https://www.v-next.cn/index.do">V-Next平台</a>
<a class="f-hover" target="_blank" href="https://www.chinahtz.com/index.do">科技金融信息服务平台</a>
</li>
<li>
<a class="f-hover" target="_blank" href="http://webapi.cninfo.com.cn/">深证信数据服务平台</a>
<a class="f-hover" target="_blank" href="https://zb.cninfo.com.cn/#/">数据采集众包平台</a>
</li>
</ul>
</div>
<div class="contracks">
<p class="f-txt">关注我们</p>
<div class="email">联系方式:<a class="f-hover" href="mailto:ssi@cninfo.com.cn">ssi@cninfo.com.cn</a></div>
<ul class="jc-list social-list">
<li>
<div>
<img width="70" height="70" src="/new/assets/image/pic-wechat.png" alt="">
</div>
<span>公众号</span>
</li>
<li>
<div>
<img width="70" height="70" src="/new/assets/image/pic-weibo.png" alt="">
</div>
<span>微博</span>
</li>
</ul>
</div>
</div>
<div class="ba">
<div class="jc-layout clearfix">
<a class="f-hover" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=44030402002031"> <img style="vertical-align: text-bottom" width="20" height="20" src="/new/assets/image/record.png" alt=""> 粤公网安备 44030402002031 号</a>
深圳证券信息有限公司 版权所有 <a class="f-hover" href="http://beian.miit.gov.cn"> 粤B2-20050313号-14 </a>
<span id="statement">
<a class="pointer fff-color" @click="stateVisible = true"> 免责声明 </a>
<el-dialog custom-class="state-pop" title="免责声明" :visible.sync="stateVisible">
<div>
<p>本网站竭力保证所提供的证券市场信息准确可靠,但并不担保(无论提示、默示、法定或其他形式)其准确性和完整性。任何使用方不得就全部或部分使用其中的证券市场信息作为依据对于由此而引起的任何损失向本公司提出索赔。</p>
<p>本网站亦不保证所设置的外部链接的准确性和完整性。任何机构或者个人通过本网站与其他网站的链接而获得其他网站内容,其风险责任自负。本公司不对此承担任何法律责任。</p>
<p>本声明在本网站首页及相关页面发布。本网站郑重提示:任何机构或者个人进入本网站,即被视为已完全知悉、理解并接受本声明的全部内容。</p>
</div>
<div slot="footer" class=" txt-c">
<el-button type="primary" @click.stop.native="stateVisible = false">确认</el-button>
</div>
</el-dialog>
</span>
</div>
</div>
</footer>
</body>
<script type="text/javascript" src="http://static.cninfo.com.cn/new/js/app/disclosure/notice/new-notice.js?v=20201127121111"></script>
内容总结
以上是互联网集市为您收集整理的使用python的selenium爬取AJAX动态网站实例全部内容,希望文章能够帮你解决使用python的selenium爬取AJAX动态网站实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。