python3 爬虫抓取股市数据
- 爬虫抓取数据的一般步骤
- 代码
- 运行结果
- 小结
- 注意事项
爬虫抓取数据的一般步骤
1、确定需要抓取的网站2、分析url,找到url的的变化规律3、分析页面的数据4、获取页面数据5、提取需要爬取的数据6、写入数据库或写入文件
代码
import requests
import random
import re# 创建 User-Agent 池
UA_list = [{"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"},{"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"},{"User-Agent":"Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"}]def get_url():'''拼接url'''try:shares_id = input("请输入股票代码:")year = input("请输入年份:")season = input("请输入季度:")url = "http://**********/trade/lsjysj_%s.html?year=%s&season=%s" % (shares_id, year, season)except:passreturn urldef get_page(url):'''获取网页数据'''ua = random.choice(UA_list) # 随机获取User-Agent,防止对方反爬response = requests.get(url, ua)if response.status_code == 200:return response.textreturn 0def parse_page(html):'''分析网页数据'''regular = re.compile(r"<tr [\s\S]*?><td>([\s\S]*?)</td><td [\s\S]*?>([\s\S]*?)</td><td [\s\S]*?>([\s\S]*?)</td><td [\s\S]*?>([\s\S]*?)</td><td [\s\S]*?>([\s\S]*?)</td>")price_list = re.findall(regular, html)# 正则表达式获取需要的股票价格,包含当天开盘价,收盘价,最高价和最低价for price in price_list:print(price)while True:url = get_url()page = get_page(url)if page:parse_page(page)breakelse:print("未找到相应股票,请重新输入")
运行结果
小结
此爬虫较为简单
1、不需要考虑登录的cookie的问题
2、没有ajax页面数据动态加载问题
3、未写入数据库或文件当中,通过终端打印的防止,直接展示出爬取的数据
4、一次只能爬取一只股票的其中一个季度的数据
注意事项
1、如果一次性爬取多条股票的价格,要注意反反爬策略,例如通过代理服务池或者连续爬取时增加程序的休眠时间
2、大量爬取数据时,可利用创建多进程的方式提高爬取效率