集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > Python >

成都爬虫工程师工资:Python爬虫之申万指数抓取

发布者: 成都达内     浏览次数:     发布时间:2019-08-16 10:50:54

前面两篇爬虫文章中提到的网页数据,通过右键查看源代码,都是可以在网页源代码中看到相关数据的。但也有一些情况是看不到的,比如申万指数中的数据...

  目标

  前面两篇爬虫文章中提到的网页数据,通过右键查看源代码,都是可以在网页源代码中看到相关数据的。但也有一些情况是看不到的,比如申万指数中的数据,http://www.swsindex.com/idx0120.aspx?columnid=8832,显示出下图红色表格数据。但右键查看源码中完全找不到相关数据。本文程序就是要赚取这类数据。

  成都爬虫工程师工资:Python爬虫之申万指数抓取

  数据源分析

  网页地址:http://www.swsindex.com/idx0120.aspx?columnid=8832

  (1)用Chrome浏览网页。

  空白处右键,选择“Inspect”,会跳出监视框。 在监视框中,用鼠标选择箭头可以找到目标数据表格所对应的代码区域。此处对应为

  成都爬虫工程师工资:Python爬虫之申万指数抓取

  空白处右键,选择“view page source”。在跳出的网页代码中,搜索前面查到的关键词“tablec”。可以发现,出了表格的标题信息以外,所有具体指数信息都不在网页代码中出现。也就意味着:(1)直接读取网页代码进行抓取是抓取不到任何信息的;(2)既然数据在网页中显示了,就网页一定加载了指定页面的数据,只有找到这个指定页面的信息以及访问方式,就可以对这些二次加载的数据进行抓取。

  成都爬虫工程师工资:Python爬虫之申万指数抓取

  (2)监视中,选择“Network”,然后刷新页面。

  在这些network对象中,可以找到最好一个“handler.aspx”,就对应于表格中的数据。

  成都爬虫工程师工资:Python爬虫之申万指数抓取

  (3)找到目标数据及来源结构。

  点击“handler.aspx”,选择右侧上边框中的“Preview”,就可以看到具体的数据,正式希望抓取的数据。

  成都爬虫工程师工资:Python爬虫之申万指数抓取

  点击“handler.aspx”,选择右侧上边框中的“Headers”,就可以数据来源,以及抓取该数据所需的全部信息。

  成都爬虫工程师工资:Python爬虫之申万指数抓取

  (4)抓取分析

  至此,需要收集的信息出处都有了(上图中绿色框),接下来是如何用python程序实现抓取了。

  地址,见第一个框

  URL = ‘http://www.swsindex.com/handler.aspx’

  浏览器模拟,这个是通用型,可以固定使用。

  req_headers= {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', 'Connection': 'keep-alive'}

  见第三个框,交互表单填写

  values = {'tablename':'swzs', 'key':'L1', 'p':1, 'where':"L1 in('801010','801020','801030','801040','801050', '801060','801070','801080','801090','801100','801110','801120', '801130','801140','801150','801160','801170','801180','801190', '801200','801210','801220','801230','801710','801720','801730', '801740','801750','801760','801770','801780','801790','801880', '801890')", 'orderby':'', 'fieldlist':'L1,L2,L3,L4,L5,L6,L7,L8,L11', 'pagecount':'28', 'timed':time.time() }

  爬虫程序

  运行环境:Win10系统;Python 3.0;Sublime Text编辑;

  # 库文件引用 import requests import lxml.html from lxml import etree from pandas.io.html import read_html from pandas.compat import StringIO from scipy.optimize import curve_fit import urllib from urllib.request import urlopen, Request import re import json import time # 浏览器头文件 URL_HDR = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept-Encoding': 'none', 'Accept-Language': 'en-US,en;q=0.8', 'Connection': 'keep-alive'} # 基础函数 def XHR(URL,values,req_headers = URL_HDR,encoding='utf-8'): data = urllib.parse.urlencode(values) data = data.encode(encoding) req = Request(url, data, req_headers) response = urlopen(req) text = response.read() text = text.decode(encoding) return text def FormData(tablename,key,p,where,ordeby,fieldlist,pagecount,timed=None): values = { 'tablename':tablename, 'key':key, 'p':p, 'where':where, 'orderby':ordeby, 'fieldlist':fieldlist, 'pagecount':pagecount, 'timed':time.time() } return values # 本案例的参数 url = 'http://www.swsindex.com/handler.aspx' values = FormData('swzs','L1',1,"L1 in('801010','801020','801030','801040','801050','801060','801070','801080','801090','801100','801110','801120','801130','801140','801150','801160','801170','801180','801190','801200','801210','801220','801230','801710','801720','801730','801740','801750','801760','801770','801780','801790','801880','801890')",'','L1,L2,L3,L4,L5,L6,L7,L8,L11','28') text = XHR(url,values) print(text)

  抓取结果:

  {'root':[{'L1':'801010','L2':'农林牧渔 ','L3':'2808.21','L4':'2811.07','L5':'9799939222.00','L6':'2816.86','L7':'2795.17','L8':'2806.87','L11':'955979549'},{'L1':'801020','L2':'采掘

  案例2:

  案例2参数

  url = 'http://www.swsindex.com/handler.aspx'; values = FormData('SwIndexInfo','id',1,"IndexType in('量化策略','市场表征','风格指数','特征指数','一级行业','定制发布','申万商品期货指数')",'swindexcode_0','SwIndexCode,SwIndexName,createlinkurltime','79') text = XHR(url,values) print(text)

  抓取结果:

  {'root':[{'SwIndexCode':'801001','SwIndexName':'申万50','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801002','SwIndexName':'申万中小板','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801003','SwIndexName':'申万A指','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801005','SwIndexName':'申万创业板','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801010','SwIndexName':'农林牧渔','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801020','SwIndexName':'采掘','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801030','SwIndexName':'化工','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801040','SwIndexName':'黑色金属','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801050','SwIndexName':'有色金属','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801060','SwIndexName':'建筑建材','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801070','SwIndexName':'机械设备','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801080','SwIndexName':'电子元器件','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801090','SwIndexName':'交运设备','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801100','SwIndexName':'信息设备','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801110','SwIndexName':'家用电器','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801120','SwIndexName':'食品饮料','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801130','SwIndexName':'纺织服装','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801140','SwIndexName':'轻工制造','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801150','SwIndexName':'医药生物','createlinkurltime':'2017/8/1 0:00:00'},{'SwIndexCode':'801160','SwIndexName':'公用事业','createlinkurltime':'2017/8/1 0:00:00'}]}

  小结

  本文程序解决在源代码中查看不到的数据抓取,也可称为POST-XHR数据抓取。这种数据抓取可能是最为普遍的方式。通过目前的3篇python爬虫介绍,基本可以满足个人对股票、房产、电影、餐饮等等数据的爬取需求。

(责任编辑:范老师)
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都市高新区奥克斯广场B座1708

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56