python爬虫实战之实时数据挖掘

实时数据挖掘

序言

 通过使用Selenium库实现对新浪财经股票实时数据、东方财富网、裁判文书网、巨潮资讯网的实时数据挖掘。由于这部分内容涉及爬虫进阶知识,所以我把这部分内容归于爬虫专栏。

1. 新浪财经实时数据挖掘实战

1.1 获取网页源代码

使用无界面浏览器方式获取源代码

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe',
                           options=chrome_options)
browser.get("http://finance.sina.com.cn/realstock/company/sh000001/nc.shtml")
data = browser.page_source
browser.quit()
print(data)

部分结果如图所示:
在这里插入图片描述

1.2 数据提取

我们要提取上证综合指数,因为这个指数是唯一的且不断变化,首先我们要定位网页源代码。
在这里插入图片描述
可以得到,如果上证综合指数是下降的话,class为down;同理,如果上证综合指数是上升的话,class为up。

from selenium import webdriver
import re
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe',
                           options=chrome_options)
browser.get('http://finance.sina.com.cn/realstock/company/sh000001/nc.shtml')
data = browser.page_source
browser.quit()
p_price = '<div id="price" class=".*?">(.*?)</div>'
price = re.findall(p_price, data)
print(price)  # 上证综合指数的股价

结果: [‘2976.53’]

2. 东方财富网数据挖掘实战

2.1 获取网页源代码

 首先我们进入东方财富网,然后点击搜索阿里巴巴,我们爬取阿里巴巴的源代码。
在这里插入图片描述
 我们使用无界面浏览器模式来获取该网站源代码:

from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe',
                           options=chrome_options)
browser.get('http://so.eastmoney.com/news/s?keyword=阿里巴巴')
data = browser.page_source
print(data)
browser.quit()

部分结果如下图所示:
在这里插入图片描述

2.2 编写正则表达式提取数据

我们的要提取新闻题目、链接、日期,首先查看网站源代码:
在这里插入图片描述
有了源代码,我们就可以编写正则表达式来提取这一部分的数据了。

p_title = '<div class="news-item"><h3><a href=".*?">(.*?)</a>'
p_href = '<div class="news-item"><h3><a href="(.*?)">.*?</a>'
p_date = '<p class="news-desc">(.*?)</p>'
title = re.findall(p_title, data)
href = re.findall(p_href, data)
date = re.findall(p_date, data, re.S)

2.3 数据的清洗及打印输出

 提取的数据往往不美观并且不易使用,所以我们必须要对数据进行清洗,比如说日期里有一些不需要的新闻摘要等内容,它们中间通过空格分割,所以我们可以用split()函数进行分割。
在这里插入图片描述
代码如下:

for i in range(len(title)):
    title[i] = re.sub('<.*?>', '', title[i])
    date[i] = date[i].split(' ')[0]
    print(str(i+1) + '.' + title[i] + ' - ' + date[i])
    print(href[i])

2.4 实战代码

 将之前的代码做一个汇总并加以改进,就可以实现对东方财经网数据的挖掘了!

from selenium import webdriver
import re
def dongfang(company):
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe',
                               options=chrome_options)
    url = 'http://so.eastmoney.com/news/s?keyword=' + company
    browser.get(url)
    data = browser.page_source
    browser.quit()
    p_title = '<div class="news-item"><h3><a href=".*?">(.*?)</a>'
    p_href = '<div class="news-item"><h3><a href="(.*?)">.*?</a>'
    p_date = '<p class="news-desc">(.*?)</p>'
    title = re.findall(p_title, data)
    href = re.findall(p_href, data)
    date = re.findall(p_date, data, re.S)
    for i in range(len(title)):
        title[i] = re.sub('<.*?>', '', title[i])
        date[i] = date[i].split(' ')[0]
        print(str(i+1) + '.' + title[i] + ' - ' + date[i])
        print(href[i])
companys = ['华能信托', '阿里巴巴', '腾讯', '京东']
for i in companys:
    try:
        dongfang(i)
        print(i + '该公司东方财富网爬取成功')
    except:
        print(i + '该公司东方财富网爬取失败')

代码执行结果如下:
在这里插入图片描述在这里插入图片描述

3. 裁判文书网数据挖掘实战

 裁判文书网是最权威的生效裁判文书公示网站,对于金融行业内部风控和舆情监控有较高的价值,其首页如图所示:
在这里插入图片描述
要获取该网站的内容,我们以输入当事人为例,使用Selenium库以及XPath动态爬取该网站数据:

from selenium import webdriver
import time
browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe')
browser.get('http://wenshu.court.gov.cn/')
browser.maximize_window()
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(10)
data = browser.page_source
browser.quit()
print(data)

4. 巨潮资讯网数据挖掘实战

 巨潮资讯网是中国证券监督管理委员会指定的上市公司信息披露网站,创建于1995年,是国内最早的证券信息专业网站,也是国内首家全面披露沪3000多家上市公司公告信息和市场数据的大型证券专业网站。同样,我们还是挖掘标题、链接、日期信息。

4.1 获取网页源代码

from selenium import webdriver
browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe')
url = 'http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=理财'
browser.get(url)
data = browser.page_source
print(data)

4.2 编写正则表达式提取数据

p_title = '<span title="" class="r-title">(.*?)</span>'
p_href = '<a target="_blank" href="(.*?)data-id='
p_date = '<span class="time">(.*?)</span>'
title = re.findall(p_title, data)
href = re.findall(p_href, data)
date = re.findall(p_date, data, re.S)

4.3 数据清洗及打印输出

for i in range(len(title)):
    title[i] = re.sub(r'<.*?>', '', title[i])
	href[i] = 'http://www.cninfo.com.cn' + href[i]     
	href[i] = re.sub('amp;', '', href[i])
    date[i] = date[i].split(' ')[0]
    print(str(i+1) + '.' + title[i] + ' - ' + date[i])
    print(href[i])

4.4 实战代码

import re
from selenium import webdriver
def juchao(keyword):
    browser = webdriver.Chrome(executable_path=r'C:\Users\wwww\AppData\Local\Google\Chrome\Application\chromedriver.exe')
    url = 'http://www.cninfo.com.cn/new/fulltextSearch?notautosubmit=&keyWord=' + keyword
    browser.get(url)
    data = browser.page_source
    browser.quit()
    p_title = '<span title="" class="r-title">(.*?)</span>'
    p_href = '<a target="_blank" href="(.*?)data-id='
    p_date = '<span class="time">(.*?)</span>'
    title = re.findall(p_title, data)
    href = re.findall(p_href, data)
    date = re.findall(p_date, data, re.S)
    for i in range(len(title)):
        title[i] = re.sub(r'<.*?>', '', title[i])
        href[i] = 'http://www.cninfo.com.cn' + href[i]
        href[i] = re.sub('amp;', '', href[i])
        date[i] = date[i].split(' ')[0]
        print(str(i+1) + '.' + title[i] + ' - ' + date[i])
        print(href[i])
    file1 = open('D:\\python代码\\金融大数据挖掘与分析\\Chapter9\\数据挖掘报告.txt', 'a')
    file1.write(keyword + '数据挖掘completed!' + '\n' + '\n')
    for i in range(len(title)):
        file1.write(str(i+1) + '.' + title[i] + ' - ' + date[i] + '\n')
        file1.write(href[i] + '\n')  # '\n'表示换行
    file1.write('——————————————————————————————' + '\n' + '\n')
    file1.close()
keywords = ['理财', '现金管理', '纾困']
for i in keywords:
    juchao(i)

部分结果:
在这里插入图片描述

结尾

 通过对一些网站的信息爬取,掌握了一些爬取方法以及爬虫技巧,还能熟练使用Python语言编写代码,从而有利于人们对这些数据的分析以及利用,从而为社会作出更好的决策。

发布了9 篇原创文章 · 获赞 67 · 访问量 5685
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章