前文的爬虫都建立在静态网页基础之上,首先通过请求网站url获取到网页源代码。之后对源代码进行信息提取进而存储即可,本文则针对动态网页进行数据采集,首先介绍Ajax相关理论,之后实战爬取同花顺动态网页,获取个股相关信息。
一、Ajax理论1.Ajax简介
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
2.Ajax分析
微博网站就是一个比较容易识别的带有Ajax的动态网页,首先打开Dectools工具(调至XHR一栏)和中南财经政法大学的官微网站(https://m.weibo.cn/u/1216903164),这里选用的是移动端微博,之后选择清空所有内容。
接下来滚动滑轮将页面向下拉,直至清空的XHR一栏出现新的item,点开这个item并选择Preview栏即可发现这里对应的相应内容即为页面新出现的微博,而反观上方网页链接却没有变,此时我们即可判定这是一个经过Ajax请求之后的网页。
3.Ajax提取
还是选择同样的条目进入Headers进一步查看信息,可以发现这是一个GET类型的请求,请求url为:https://m.weibo.cn/api/container/getIndex?type=uid&value=1216903164&containerid=1076031216903164&since_id=4479891116113956,即请求的参数有四个:type、value、containerid、since_id,随后接着翻页发现除since_id变化外,其余都不变化,这里可知since_id即为翻页方式。
接下来进一步观察since_id发现上下请求之间的since_id无明显规律,进一步查找可知下一页的since_id在上一页响应中的cardListInfo里,因此可以建立循环联系进一步将动态url循环加至爬虫里。
发起请求获取响应之后进一步分析,可知响应格式为json,因此进一步对json进行处理即可得最终数据!
二、网页分析1.网页概览
有了上文分析之后我们将通过同花顺网页数据采集实战进行实例验证。首先打开网页:http://q.10jqka .cn/,如下图:
进一步按F12键打开Devtools后台源代码,鼠标放至第一条目右键检查可展现出源代码中所在位置。
2.Ajax判别
接下来我们通过点击网页下方的下一页,发现网页url没有发生任何变化!此时基本可以判定此网页属于Ajax动态网页。
进一步我们清空Network中所有内容,继续点击下一页至第五页,发现连续弹出三条Name相同内容,可通过General栏获取到请求的url以及请求头的具体内容。
因此我们将此请求url复制放至浏览器中打开,响应内容果然为标准化表格数据,这正是我们想要的内容。
3.Ajax提取
接着我们同样打开源代码,发现为html文档,表明响应内容为网页形式,这与上文微博响应json格式不同,因此之后可以通过网页解析形式获取数据。
三、爬虫实战1.网页获取
在经过第一部分的理论介绍和第二部分的网页分析之后我们就可以开始编写爬虫代码了,首先导入库,并定义请求头。需要注意一点的是此处的请求头除User-Agent外还需要host、Referer和X-Requested-With参数,要区分与静态网页爬取。
# 导入库import timeimport jsonimport randomimport requestsimport pandas as pdfrom bs4 import BeautifulSoupheaders = { 'host':'q.10jqka .cn', 'Referer':'http://q.10jqka .cn/', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36', 'X-Requested-With':'XMLHttpRequest'}url = 'http://q.10jqka .cn/index/index/board/all/field/zdf/order/desc/page/%s/ajax/1/' % page_idres = requests.get(url,headers=headers)res.encoding = 'GBK'2.信息提取
之后就是上文解析库中的内容,此处采用BaetifulSoup库更易于理解。先将上文html转化为BeautifulSoup对象,之后通过对象的select选择器选择响应tr标签内的数据,并进一步解析每一条tr标签的内容即可得到以下相应信息。
# 获取单页数据def get_html(page_id): headers = { 'host':'q.10jqka .cn', 'Referer':'http://q.10jqka .cn/', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36', 'X-Requested-With':'XMLHttpRequest' } url = 'http://q.10jqka .cn/index/index/board/all/field/zdf/order/desc/page/%s/ajax/1/' % page_id res = requests.get(url,headers=headers) res.encoding = 'GBK' soup = BeautifulSoup(res.text,'lxml') tr_list = soup.select('tbody tr') # print(tr_list) stocks = [] for each_tr in tr_list: td_list = each_tr.select('td') data = { '股票代码':td_list[1].text, '股票简称':td_list[2].text, '股票链接':each_tr.a['href'], '现价':td_list[3].text, '涨幅':td_list[4].text, '涨跌':td_list[5].text, '涨速':td_list[6].text, '换手':td_list[7].text, '量比':td_list[8].text, '振幅':td_list[9].text, '成交额':td_list[10].text, '流通股':td_list[11].text, '流通市值':td_list[12].text, '市盈率':td_list[13].text, } stocks.append(data) return stocks3.保存数据
定义write2excel函数将数据保存至stocks.xlsx文件中。
# 保存数据def write2excel(result): json_result = json.dumps(result) with open('stocks.json','w') as f: f.write(json_result) with open('stocks.json','r') as f: data = f.read() data = json.loads(data) df = pd.DataFrame(data,columns=['股票代码','股票简称','股票链接','现价','涨幅','涨跌','涨速','换手','量比','振幅','成交额', '流通股','流通市值','市盈率']) df.to_excel('stocks.xlsx',index=False)4.循环结构
考虑到同花顺多页结构,同时存在反爬,此处同样采用字符串拼接和循环结构遍历多页股票信息,同时通过random库中randint方法和time库的sleep方法间断一定时长再进行爬取。
def get_pages(page_n): stocks_n = [] for page_id in range(1,page_n+1): page = get_html(page_id) stocks_n.extend(page) time.sleep(random.randint(1,10)) return stocks_n最终的爬取结果如下:
四、爬虫总结至此同花顺动态网页的爬取完成,再通过此爬虫总结一下:首先我们通过浏览网页结构和翻页对比XHR栏对该页进行Ajax判定,如果网页url不变且XHR会刷新内容则基本表明为动态网页,此时我们进一步查看多页间url请求的异同并找寻规律,规律找到之后即可建立多页请求流程。之后对单独一个响应内容进行处理(具体看响应内容的格式),最后建立起整个循环爬虫结构即可自动化爬取想要的信息。
爬虫完整代码可以在头条号中私信获得。下文将进一步对浏览器模拟行为进行讲解和实战,前文涉及的基础知识可参考下面链接:
爬虫所要了解的基础知识,这一篇就够了!Python网络爬虫实战系列
一文带你深入了解并学会Python爬虫库!从此数据不用愁
Python爬虫有多简单?一文带你实战豆瓣电影TOP250数据爬取!
本文TAG:财经网站源码
- 上一篇: 英雄联盟全明星赛什么时候开始(英雄联盟全明星赛投票)
- 下一篇: 信誉传奇一条龙(传奇sf一条龙)
猜你喜欢
- 2023-08-30赤炎单职业传奇嬉戏里做事押镖任务中有什么方法?讨论赤炎单职业传奇每日押镖任务帮扶你极快升级
- 2023-08-30龙吟单职业传奇中帮你如何搭配夫妻传送功能(龙吟单职业传奇攻略详解)
- 2023-08-30首次接触合击传奇卡怪游戏玩家的绝对晓得的最好怪物,,跟合击传奇卡怪中最先起步的高好机会打宝地图无保留分享传授
- 2023-08-30【双通单职业传奇攻略】双通单职业传奇背包东西扔不出去是怎么回事
- 2022-02-22新开传奇手游使用拍卖行用于交易时最好提前沟通好
- 2022-02-22有哪些方法可以让我们弄到元宝
- 最近发表
- 标签列表
-
- 传奇手游私服 (7)
- 新开传奇手游网站 (7)
- 传奇单职业 (2)
- 传奇手游变态版 (1)
- 传奇发布网 (7)
- 传奇sf手游版 (1)
- 新开传奇 (1)
- 传奇私服 (1)
- 拳皇7k7k小游戏 (0)
- nitrome小游戏 (0)
- 最新传奇发布网 (0)
- 每日新开传奇网 (0)
- 找176复古传奇 (0)
- 超级变态热血传奇 (0)
- nba2k11最新名单 (0)
- 王者荣耀更新 (0)
- 王者荣耀体验服申请 (0)
- 英雄联盟出装顺序 (0)
- 三国志单机游戏 (0)
- 王者荣耀宫本武藏符文 (0)
- 梦幻西游109神器任务攻略 (0)
- 下载英雄联盟 (0)
- 机械公敌兰博出装 (0)
- 王者荣耀西施 (0)
- 王者荣耀无限火力 (0)
- 不知火舞王者荣耀 (0)
- 300英雄三笠出装 (0)
- 冒险岛2职业 (0)
- 龙将2官网 (0)
- 热血传奇怀旧版好玩吗 (0)
- 传奇超级 (0)
- 传奇师服 (0)
- 迷失传奇发布网 (0)
- 韩版传奇私服发布网 (0)
- 传世新开 (0)
- 传奇2外挂 (0)
- 传奇复古 (0)
- 单职业变态 (0)
- 传奇sf180 (0)
- 传世sf吧 (0)
- 传奇私服gm命令大全 (0)
- 传奇世界私服刷元宝 (0)
- dnf私服发布网 (0)
- 网页三国游戏排行榜 (0)
- 傲视千雄私服 (0)
- 热血传奇176客户端下载 (0)
- 最新机战私服 (0)
- 传奇吉吉免费版 (0)
- 蜘蛛纸牌游戏 (0)
- 最热门的网游排行榜 (0)
- 2d网游 (0)
- 网游私服排行榜 (0)
- moba网游 (0)
- 439小游戏 (0)
- 飞车小游戏 (0)
- 奥奇传说小游戏 (0)
- 龙斗士小游戏 (0)
- 下载手机游戏 (0)
- 维京神域之战 (0)
- 星际2单机 (0)
- 防守类单机游戏 (0)
- 灰烬攻略 (0)
- 战神3pc版 (0)
- 腐尸之屋 (0)
- 新神奇传说3秘籍 (0)
- 生化危机5怎么存档 (0)
- 三国群英传1单机版下载 (0)
- 捕鱼达人手机版 (0)
- 仙剑奇侠传游戏1 (0)
- 暴力摩托单机版下载 (0)
- fifa12下载 (0)
- 色单机游戏 (0)
- 三国志13修改器 (0)
- 梦幻西游单机版神剑情天3 (0)
- 对打单机游戏 (0)
- 三国群英传7补丁 (0)
- 最好单机游戏下载 (0)
- 流星蝴蝶剑秘籍大全 (0)
- 孢子 (0)
- 梦幻西游赚钱 (0)
- 梦幻西游答题 (0)
- 王者荣耀防沉迷 (0)
- 梦幻西游挖图技巧 (0)
- 梦幻岛游戏 (0)
- 轩辕剑网游官网 (0)
- 梦幻西游手游论坛 (0)
- 极道阴阳师 (0)
- 仙剑奇侠传3下载 (0)
- 七龙珠人物换装2 (0)
- 赛尔号手机版下载 (0)
- lol战队名字 (0)
- 黑湾海盗中文版 (0)
- 超级街霸4街机版 (0)
- 侵略行为 (0)
- 孤岛惊魂3结局 (0)
- 龙珠单机游戏大全 (0)
- 仙剑三游戏下载 (0)
- 策略单机游戏 (0)
- 家园2简体中文版 (0)
- 现代战争2 (0)