获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。

本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。

一、网页源码的获取

很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。

import urllib.request

url='ar.com/stock/ranklist_a_3_1_1.html'  #目标网址headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"}  #伪装浏览器请求报头request=urllib.request.Request(url=url,headers=headers)  #请求服务器response=urllib.request.urlopen(request)  #服务器应答content=response.read().decode('gbk')   #以一定的编码方式查看源码print(content)  #打印页面源码

虽说抓一页的源码容易,不过在一个网站内大量抓取网页源码却经常遭到服务器拦截,顿时感觉世界充满了恶意。于是我开始研习突破反爬虫限制的功法。

1.伪装流浪器报头

很多服务器通过浏览器发给它的报头来确认是否是人类用户,所以我们可以通过模仿浏览器的行为构造请求报头给服务器发送请求。服务器会识别其中的一些参数来识别你是否是人类用户,很多网站都会识别User-Agent这个参数,所以请求头最好带上。有一些警觉性比较高的网站可能还会通过其他参数识别,比如通过Accept-Language来辨别你是否是人类用户,一些有防盗链功能的网站还得带上referer这个参数等等。

2.随机生成UA

证券之星只需带User-Agent这个参数就可以抓取页面信息了,不过连续抓取几页就被服务器阻止了。于是我决定每次抓取数据时模拟不同的浏览器发送请求,而服务器通过User-Agent来识别不同浏览器,所以每次爬取页面可以通过随机生成不同的UA构造报头去请求服务器,

3.减慢爬取速度

虽然模拟了不同浏览器爬取数据,但发现有的时间段可以爬取上百页的数据,有时候却只能爬取十来页,看来服务器还会根据你的访问的频率来识别你是人类用户还是网络爬虫。所以我每抓取一页都让它随机休息几秒,加入此句代码后,每个时间段都能爬取大量股票数据了。

4.使用代理IP

天有不测风云,程序在公司时顺利测试成功,回寝室后发现又只能抓取几页就被服务器阻止了。惊慌失措的我赶紧询问度娘,获知服务器可以识别你的IP,并记录此IP访问的次数,可以使用高匿的代理IP,并在抓取的过程中不断的更换,让服务器无法找出谁是真凶。此功还未修成,欲知后事如何,请听下回分解。

5.其他突破反爬虫限制的方法

很多服务器在接受浏览器请求时会发送一个cookie文件给浏览器,然后通过cookie来跟踪你的访问过程,为了不让服务器识别出你是爬虫,建议最好带上cookie一起去爬取数据;如果遇上要模拟登陆的网站,为了不让自己的账号被拉黑,可以申请大量的账号,然后再爬入,此处涉及模拟登陆、验证码识别等知识,暂时不再深究...总之,对于网站主人来说,有些爬虫确实是令人讨厌的,所以会想出很多方法限制爬虫的进入,所以我们在强行进入之后也得注意些礼仪,别把人家的网站给拖垮了。

二、所需内容的提取

获取网页源码后,我们就可以从中提取我们所需要的数据了。从源码中获取所需信息的方法有很多,使用正则表达式就是比较经典的方法之一。我们先来看所采集网页源码的部分内容。

为了减少干扰,我先用正则表达式从整个页面源码中匹配出以上的主体部分,然后从主体部分中匹配出每只股票的信息。代码如下。

pattern=re.compile('

')

body=re.findall(pattern,str(content))  #匹配

之间的所有代码pattern=re.compile('>(.*?)

stock_page=re.findall(pattern,body[0])  #匹配>和

其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。

语法    说明

.    匹配任意除换行符“\n”外的字符

*    匹配前一个字符0次或无限次

?    匹配前一个字符0次或一次

\s    空白字符:[\t\r\n\f\v]

\S    非空白字符:[^\s]

[...]    字符集,对应的位置可以是字符集中任意字符

(...)    被括起来的表达式将作为分组,里面一般为我们所需提取的内容

正则表达式的语法挺多的,也许有大牛只要一句正则表达式就可提取我想提取的内容。在提取股票主体部分代码时发现有人用xpath表达式提取显得更简洁一些,看来页面解析也有很长的一段路要走。

三、所得结果的整理

通过非贪婪模式(.*?)匹配>和

stock_last=stock_total[:] #stock_total:匹配出的股票数据for data in stock_total:  #stock_last:整理后的股票数据

if data=='':

stock_last.remove('')

最后,我们可以打印几列数据看下效果,代码如下

print('代码','\t','简称','   ','\t','最新价','\t','涨跌幅','\t','涨跌额','\t','5分钟涨幅')for i in range(0,len(stock_last),13):        #网页总共有13列数据

print(stock_last[i],'\t',stock_last[i+1],' ','\t',stock_last[i+2],'  ','\t',stock_last[i+3],'  ','\t',stock_last[i+4],'  ','\t',stock_last[i+5])

python自动炒股软件下载_python自动股票交易软件相关推荐

  1. python自动炒股软件下载_Python自动获取当日所有股票数据

    开年以来,大盘直接从2400站上了3200,为了后续进一步分析股票数据,我想把每只股票每天的数据保存下来. import pandas as pd import tushare as ts impor ...

  2. 如何用python编写炒股软件下载_Python实现股市信息下载的方法

    本文实例讲述了Python实现股市信息下载的方法.分享给大家供大家参考.具体如下: 该程序下载来自yahoo财经的股市信息. import urllib def getURL(url): socket ...

  3. chatgpt赋能python:Python编程炒股软件:优秀的股票市场分析工具

    Python 编程炒股软件:优秀的股票市场分析工具 Python 编程语言一直以来在数据分析和科学计算领域处于领先地位.由于它强大的数据处理能力和易于使用的编程语言特性,Python成为了许多股票市场 ...

  4. python主题壁纸下载_Python开发专属壁纸下载与轮换程序

    本人对于壁纸一直偏佛系,不爱特意去找一堆壁纸.因此用Python简单地搞了一个自动下载壁纸,定时随机轮换的功能来自娱自乐,顺便分享给大家. 原文链接:https://www.codernice.top ...

  5. python网站框架下载_Python搭建网站框架

    1. 机器上安装python 在python官网下载python的2.7版本,然后一路next就可以安装了: 安装结束后,开启菜单会有python客户端,但是一般使用cmd命令行模式进行运行: 添加p ...

  6. python交互式解释器下载_Python解释器

    当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的 ...

  7. python xlrd模块下载_python xlrd模块介绍

    转载自:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html 一.安装xlrd模块 到python官网下载 二.使用介绍 1.导入 ...

  8. python制作自动交易软件下载_python自动量化交易系统

    [实例简介] python实现量化分析,交易系统,自动化运维,动态加载策略 [实例截图] [核心代码] quant └── easyquant-master ├── custom │   ├── fi ...

  9. python代码自动生成器下载_Python代码生成器

    iefans下载为用户提供的Python代码生成器是一款高效实用的多功能代码自动编辑软件,该软件采用Delphi语言开发,同时内置了大量的编程学习内容与百款实例代码,让用户能够使用Python代码生成 ...

最新文章

  1. PHP feof() 函数读文件的使用
  2. Self-Orthogonality Module:一个即插即用的核正交化模块
  3. linux常见问题及其解决方案集锦
  4. SAP云平台webIDE UI5应用的Application Status菜单实现细节
  5. leetcode55 跳跃游戏 秒杀所有答案
  6. 在Delphi中使用Action降低水平功能和业务功能的耦合
  7. solaris中如何新建一个用户登录
  8. 第10章 项目沟通管理
  9. java生产者消费者模型
  10. noj [1480] 懒惰的风纪委Elaine (多重背包)
  11. 关于变压器的这些小知识
  12. matlab计算海洋浮力频率_MATLAB气象海洋简单粗暴教程(三十四)——MATLAB里画图的统计函数...
  13. 关于阿里云服务器安全组规则
  14. 光猫、路由器、交换机、中继器、网桥是什么?
  15. 戴尔便携式计算机右键,戴尔最新笔记本如何在右键菜单添加“在此处打开命令窗口”设置项?...
  16. 3D美术人员Technical Artist(TA技术美术)的学习之旅(3)
  17. 概率论与数理统计学习笔记——第13讲——依概率收敛的意义
  18. DirectX11 Direct3D基本概念
  19. org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.Mav
  20. 【笨木头Unity】入门之旅009:Demo之四处找死(四)_在代码里操作物体

热门文章

  1. 解密小程序云开发数据库
  2. HttpDNS功能说明及实现
  3. Facebook开源计算机视觉目标检测平台Detectron
  4. android jni开发方式
  5. Kafka史上最详细总结
  6. 缓存、内存、硬盘、虚拟硬盘
  7. 左神算法:单调栈结构(Java版)
  8. 【Mybatis框架】从零开始学Mybatis框架——使用示例
  9. DPDK精准测量时间
  10. PAT甲级 -- 1009 Product of Polynomials (25 分)