@[toc]
1. 新浪财经股票实时数据挖掘
之前的博文介绍了使用Selenium库获取网页源码的方式,代码如下:
def get_source_code(url):
# 以无界面浏览器的方式获取网页源代码
chrome_option = webdriver.ChromeOptions()
chrome_option.add_argument('--headless')
browser = webdriver.Chrome(options=chrome_option)
browser.get(url)
data = browser.page_source
return data
获取网页源码之后就需要进行数据提取工作,需要从网页源码中观察实时股票信息的数据规律。
<div id="price" class="up">股价</div>
这里发现贵州茅台股价的id为price,id类似身份证号,一个网页中的id一般不会重复,class表示类别,茅台股价在2020年2月7日收盘价为上涨状态,所以推测up表示上涨的类别,down表示下跌的类别,经过验证,推测无误。
sina_url = 'https://finance.sina.com.cn/realstock/company/sh600519/nc.shtml'
source_data = get_source_code(sina_url)
price_pattern = '<div id="price" class=.*?>(.*?)</div>'
price = re.findall(price_pattern, source_data)
2. 东方财富网数据挖掘
东方财富网是一家专业的互联网财经媒体,提供7*24小时财经资讯及全球金融市场报价,汇聚全方位的综合财经新闻和金融市场资讯。
这里实现获取东方财富网中上市公司的新闻,如果通过Requests库来访问,就算加上headers参数也无法获取网页的全部源代码,因此这里使用Selenium库来实现新闻爬取功能。
依然采用无界面浏览器模式访问该网站,这里以A股上市公司京东方A为例:
east_url = 'http://so.eastmoney.com/news/s?keyword=京东方A'
source_data = get_source_code(east_url)
# print(source_data)
# 编写正则表达式提取数据
title_pattern = '<div class="news-item"><h3><a href=.*?>(.*?)</a>'
href_pattern = '<div class="news-item"><h3><a href=(.*?)>.*?</a>'
date_pattern = '<p class="news-desc">(.*?)</p>'
title = re.findall(title_pattern, source_data)
href = re.findall(href_pattern, source_data)
date = re.findall(date_pattern, source_data)
# 数据清洗
for i in range(len(title)):
title[i] = re.sub('<.*?>', '', title[i]) # 标题中含有<em>
date[i] = date[i].split(' ')[0] # date数据在第一个位置
print(str(i+1) + '.' + title[i] + '-' + date[i])
print(href[i])
执行结果为:
1.深股通连续3日净卖出京东方A 累计净卖出2.72亿元-2020-02-07
"http://stock.eastmoney.com/news/1406,202002071376301774.html"
2.【调研快报】京东方A接待国泰君安创投等278家机构调研-2020-02-07
"http://stock.eastmoney.com/news/11064,202002071376191946.html"
3.二月电视面板价格涨幅高于预期 疫情对手机面板影响有限-2020-02-07
"http://finance.eastmoney.com/news/1355,202002071376099760.html"
4.京东方A(000725)融资融券信息(02-06)-2020-02-07
"http://stock.eastmoney.com/news/1697,202002071375472172.html"
5.京东方A:融资净买入1.83亿元,两市排名第12(02-06)-2020-02-06
"http://stock.eastmoney.com/news/11075,202002071375376492.html"
3. 裁判文书网数据挖掘实战
裁判文书网是最权威的生效裁判文书公式网站,对于金融兴业内部风控和舆情监控有较高的参考价值,其首页如下图所示,这里继续采用Selenium库获取网站信息。
这里以在该网站中搜索“房地产”相关案件为例,需要实现的功能是模拟在搜索框中输入“房地产”,并单击“搜索”按钮。要想实现该功能,需要先获取“搜索框”和“搜索”按钮的XPath或者css_selector内容。方法详见Selenium库使用。
实现代码如下:
wenshu_url = 'http://wenshu.court.gov.cn/'
browser = webdriver.Chrome()
browser.get(wenshu_url)
browser.find_element_by_xpath('//*[@id="_view_1540966814000"]/div/div[1]/div[2]/input').clear()
browser.find_element_by_xpath('//*[@id="_view_1540966814000"]/div/div[1]/div[2]/input').send_keys('房地产')
browser.find_element_by_xpath('//*[@id="_view_1540966814000"]/div/div[1]/div[3]').click()
time.sleep(20)
data = browser.page_source
print(data)
这里需要注意的是,裁判文书网的搜索框里有一些默认文本,所以在模拟输入关键词“房地产”之前,要是用clear()函数清空搜索框(代码第四行),time.sleep(20)的含义是执行完点击搜索功能后,有一个加载的过程,为了保证获取的源码正确无误,所以设置等待一段时间再执行获取源码操作。
4. 巨潮资讯网数据挖掘
巨潮资讯网是中国证券监督管理委员会指定的上市公司信息披露网站,是国内首家全面披露深沪3000多家上市公司公告信息和市场数据的大型证券专业网站。
这里要进行的挖掘任务是在巨潮资讯网上按照指定关键词获取各家上市公司公告的标题、网址、发布日期。
- 先从获取“病毒”相关公告信息入手。在巨潮资讯网上搜索“病毒”,能看到很多公告,获取网页源代码
juchao_url = 'http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=病毒'
data = get_source_code(juchao_url)
# 提取数据
title_pattern = '<span title="" class="r-title">(.*?)</span>'
href_pattern = '<a target="_blank" href="(.*?)" data-id='
date_pattern = '<span class="time">\s*(.*?)\s*</span>'
title = re.findall(title_pattern, data)
href = re.findall(href_pattern, data)
date = re.findall(date_pattern, data)
# 数据清洗
for i in range(len(title)):
title[i] = re.sub('<.*?>', '', title[i])
title[i] = title[i].strip()
date[i] = date[i].strip()
href[i] = 'http://www.cninfo.com.cn' + href[i]
print(str(i+1) + '.' + title[i] + ' - ' + date[i])
print(href[i])
爬取到的网址少一个前缀http://www.cninfo.com.cn。