通过正则表达式,获取股票数据(re.findall的应用)

Posted becks

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过正则表达式,获取股票数据(re.findall的应用)相关的知识,希望对你有一定的参考价值。

比如,需要抓取链接“http://stockpage.10jqka.com.cn/000955/”下图3个周期的涨幅数据

技术图片

 

 这里我们先使用request请求获得数据,然后通过正则re匹配数据

分析网页结构数据,需要的数据存放在名称为“even hot_cont”的class下

技术图片

所以正则的写法为:

1、先获取class=even hot_cont下的所有数据

“tr_content = re.findall(‘<tr class="even hot_cont">(.*?)</tr‘, response, re.S)[0]”

2、再获取td标签头的数据

“td_content = re.findall(‘<td.*?>(.*?)</td‘, tr_content, re.S)”

3、最后获取需要的数据

print(td_content[1]),打印出来的结果“39.89%”
如此,我们抓取到了5日涨幅的数据,其他数据只需要修改“[]”的数字即可

 

注意:(.*?)是匹配任意字符的意思

 

全部代码

import requests
import re

cookies = {
    spversion: 20130314,
    searchGuide: sg,
    Hm_lvt_78c58f01938e4d85eaf619eae71b4ed1: 1580136391,1580289267,1580373821,1581036534,
    Hm_lvt_22a3c65fd214b0d5fd3a923be29458c7: 1581036563,1581037991,1581040818,1581042432,
    Hm_lpvt_78c58f01938e4d85eaf619eae71b4ed1: 1581042471,
    Hm_lpvt_22a3c65fd214b0d5fd3a923be29458c7: 1581042471,
    historystock: 002341%7C*%7C002179%7C*%7C002458%7C*%7C002223,
    v: AqV2ZISrF5jZjHPExrLsDULrtGrI4llAo5Y9yKeKYVzrvsuWbzJpRDPmTPc0,
}

headers = {
    Accept-Encoding: gzip, deflate,
    Accept-Language: zh-CN,zh;q=0.9,
    Upgrade-Insecure-Requests: 1,
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/63.0.3239.132 Safari/537.36,
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,
    Cache-Control: max-age=0,
    Connection: keep-alive,
}

response = requests.get(http://stockpage.10jqka.com.cn/000955/, headers=headers, cookies=cookies).text

#正则取出数据
tr_content = re.findall(<tr class="even hot_cont">(.*?)</tr, response, re.S)[0]
print(tr_content)
td_content = re.findall(<td.*?>(.*?)</td, tr_content, re.S)
print(td_content)   
print(td_content[1])

执行结果

技术图片

 

以上是关于通过正则表达式,获取股票数据(re.findall的应用)的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式 findall start() 和 end() ? Python

python:非正则表达式等价于 re.findall

python 正则(re.compile()/re.findall())

正则表达式re.findall

正则表达式 re.search 和 re.findall 的区别

使用 re.findall 在正则表达式中捕获命名组