Python爬虫实战:爬取股票信息

77 阅读5分钟

def get_stock_list(stockListURL):

r =requests.get(stockListURL, headers = headers)

doc = PyQuery(r.text)

list = []

获取所有 section 中 a 节点,并进行迭代

for i in doc('.stockTable a').items():

try:

href = i.attr.href

list.append(re.findall(r"\d{6}", href)[0])

except:

continue

list = [item.lower() for item in list] # 将爬取信息转换小写

return list

将上面的链接当做参数传入,大家可以自己运行下看下结果,小编这里就不贴结果了,有点长。。。

获取详情数据


详情的数据看起来好像是在页面上的,但是,实际上并不在,实际最终获取数据的地方并不是页面,而是一个数据接口。

qd.10jqka.com.cn/quote.php?c…

至于是怎么找出来,小编这次就不说,还是希望各位想学爬虫的同学能自己动动手,去寻找一下,多找几次,自然就摸到门路了。

现在数据接口有了,我们先看下返回的数据吧:

showStockDate({"info":{"000001":{"name":"\u5e73\u5b89\u94f6\u884c"}},"data":{"000001":{"10":"16.13","8":"16.14","9":"15.87","13":"78795234.00","19":"1262802470.00","7":"16.12","15":"40225508.00","14":"37528826.00","69":"17.73","70":"14.51","12":"5","17":"945400.00","264648":"0.010","199112":"0.062","1968584":"0.406","2034120":"9.939","1378761":"16.026","526792":"1.675","395720":"-948073.000","461256":"-39.763","3475914":"313014790000.000","1771976":"1.100","6":"16.12","11":""}}})

很明显,这个结果并不是标准的 json 数据,但这个是 JSONP 返回的标准格式的数据,这里我们先处理下头尾,将它变成一个标准的 json 数据,再对照这页面的数据进行解析,最后将分析好的值写入数据库中。

def getStockInfo(list, stockInfoURL):

count = 0

for stock in list:

try:

url = stockInfoURL + stock

r = requests.get(url, headers=headers)

将获取到的数据封装进字典

dict1 = json.loads(r.text[14: int(len(r.text)) - 1])

print(dict1)

获取字典中的数据构建写入数据模版

insert_data = {

"code": stock,

"name": dict1['info'][stock]['name'],

"jinkai": dict1['data'][stock]['7'],

"chengjiaoliang": dict1['data'][stock]['13'],

"zhenfu": dict1['data'][stock]['526792'],

"zuigao": dict1['data'][stock]['8'],

"chengjiaoe": dict1['data'][stock]['19'],

"huanshou": dict1['data'][stock]['1968584'],

"zuidi": dict1['data'][stock]['9'],

"zuoshou": dict1['data'][stock]['6'],

"liutongshizhi": dict1['data'][stock]['3475914']

}

cursor.execute(sql_insert, insert_data)

conn.commit()

print(stock, ':写入完成')

except:

print('写入异常')

遇到错误继续循环

continue

这里我们加入异常处理,因为本次爬取的数据有些多,很有可能由于某些原因抛出异常,我们当然不希望有异常的时候中断数据抓取,所以这里添加异常处理继续抓取数据。

完整代码


我们将代码稍作封装,完成本次的实战。

import requests

import re

import json

from pyquery import PyQuery

import pymysql

数据库连接

def connect():

conn = pymysql.connect(host='localhost',

port=3306,

user='root',

password='password',

database='test',

charset='utf8mb4')

获取操作游标

cursor = conn.cursor()

return {"conn": conn, "cursor": cursor}

connection = connect()

conn, cursor = connection['conn'], connection['cursor']

sql_insert = "insert into stock(code, name, jinkai, chengjiaoliang, zhenfu, zuigao, chengjiaoe, huanshou, zuidi, zuoshou, liutongshizhi, create_date) values (%(code)s, %(name)s, %(jinkai)s, %(chengjiaoliang)s, %(zhenfu)s, %(zuigao)s, %(chengjiaoe)s, %(huanshou)s, %(zuidi)s, %(zuoshou)s, %(liutongshizhi)s, now())"

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

def get_stock_list(stockListURL):

r =requests.get(stockListURL, headers = headers)

doc = PyQuery(r.text)

list = []

获取所有 section 中 a 节点,并进行迭代

for i in doc('.stockTable a').items():

try:

href = i.attr.href

list.append(re.findall(r"\d{6}", href)[0])

except:

continue

list = [item.lower() for item in list] # 将爬取信息转换小写

return list

def getStockInfo(list, stockInfoURL):

count = 0

for stock in list:

try:

url = stockInfoURL + stock

r = requests.get(url, headers=headers)

将获取到的数据封装进字典

dict1 = json.loads(r.text[14: int(len(r.text)) - 1])

print(dict1)

获取字典中的数据构建写入数据模版

insert_data = {

"code": stock,

"name": dict1['info'][stock]['name'],

"jinkai": dict1['data'][stock]['7'],

"chengjiaoliang": dict1['data'][stock]['13'],

"zhenfu": dict1['data'][stock]['526792'],

"zuigao": dict1['data'][stock]['8'],

"chengjiaoe": dict1['data'][stock]['19'],

"huanshou": dict1['data'][stock]['1968584'],

"zuidi": dict1['data'][stock]['9'],

"zuoshou": dict1['data'][stock]['6'],

"liutongshizhi": dict1['data'][stock]['3475914']

} 学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

了解详情:docs.qq.com/doc/DSnl3ZG…