参考:http://python.jobbole.com/88350/?utm_source=blog.jobbole.com&utm_medium=relatedPosts#article-comment
任务:
1. 从东方财富网获取所有的上海股票的代码信息
2.对获得代码信息通过百度股市通网站对其进行解析抓取股票名称及交易信息
3.对所抓取的信息存储到txt文件或者mongodb数据库内
准备工作:
1.第三方库、requests、BeautifulSoup、re 、mongodb(可选)、Pool(可选)
2.第三方软件 MongoDB、Robo 3T(可选)
语言:python3.5
前提说明:
网站选取规则:股票信息应该存在静态的html页面,非js加载,不然直接提取不出
如何查看是否为静态加载,我们只需要打开网页源码,查询即可。如下所示
第一步:打开股票代码查询的网址(http://quote.eastmoney.com/stocklist.html#sz)
随便打开一个,比如我们打开第一个即R003(201000), 进入后网址变为 http://quote.eastmoney.com/sh201000.html
进入网址后,任意空白位置右击鼠标点击查看网页源代码,并在源代码中按Ctrl+F查询我们需要的股票信息,这里我们输入2.000 很明显我们没有找到我们所需要的股票信息。所以这个网址的股票信息并非静态加载。所以选择其他可通过静态网址加载的股票信息网址
通过查询,我们获取了静态加载股票交易信息的网址,即百度股市通,如图所示
该网址可以直接显示股票交易信息。所以这就是我们所需要的静态网址。我们还需要分析两个网址的关系,即对原理进行分析。
原理分析
我们通过分析百度股市通网址可知,每次只需要获取股票的代码即可,每次网址变化均是对应代码的的改变,
如:我们上述图片(中药c)代码为:sh501012 对应的网址是 https://gupiao.baidu.com/stock/sh501012.html
即每次只需更换股票代码, https://gupiao.baidu.com/stock/+(股票代码)+.html
而刚好我们可以通过通过东方财富网:http://quote.eastmoney.com/stocklist.html#sz 获取各个股票的代码,只需要把代码提取出来再放到百度股市通内网址即可获取每只股票的交易信息了。 那么我们就可以开始进行信息的抓取了。
一、从东方财富网获取所有的上海股票的代码信息
(1) 对网页进行访问,获取html信息
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}
root_url = "http://quote.eastmoney.com/stocklist.html"
response = requests.get(root_url,headers = headers)
if response.status_code == 200:
response.encoding = response.apparent_encoding # 编码采用网页本身的编码
print(response.text)
else:
print('未能打开