Python金融数据挖掘(一)——从数据获取到探索性分析的全流程实训

一、前言

本文是博主大二初学python数据挖掘时所做的基础练习,目的是在理论学习的基础上,通过平常训练加深对各项技术概念的理解和应用,初学python还有很多不足,大家在阅读过程中发现有可以改进的地方欢迎私信或者评论区与我讨论。

话不多说,我们进入正题,本文讲述训练是爬虫技术基础~

二、爬虫技术基础

(一)基础知识

在开始看网页结构之前,请大家务必明确以下几点基础知识(其中HTML标签的认知在爬虫程序编写中很关键):

1. HTML基础知识

• HTML标签:了解常见的HTML标签,如<html>、<head>、<body>、<title>、<div>、<span>、<a>、<img>等。

• 属性:学习如何识别和使用标签的属性,例如href、src、class、id等。

文档结构:理解HTML文档的基本结构,包括文档类型声明(<!DOCTYPE html>)、头部(<head>)和主体(<body>)部分。

2. CSS选择器

• 基本选择器:了解如何使用ID选择器(#id)、类选择器(.class)和标签选择器(tag)来定位元素。

• 复合选择器:学习如何组合选择器,例如使用子选择器(parent > child)、后代选择器(ancestor descendant)、相邻兄弟选择器(element1 + element2)等。

• 属性选择器:学习如何使用属性选择器(如[attr=value])来定位具有特定属性值的元素。

3. DOM树

• DOM节点:理解DOM树中的不同类型的节点,包括元素节点、文本节点、属性节点等。

• DOM层次结构:学习如何查看元素的父级、子级和兄弟节点。

• DOM操作:了解如何使用JavaScript或爬虫库(如BeautifulSoup)来遍历和操作DOM树。

4. JavaScript动态内容

• 异步加载:了解如何识别和处理页面上的异步加载内容,例如通过AJAX请求加载的数据。

• 事件监听器:学习如何跟踪和模拟用户交互事件,如点击按钮、滚动页面等。

• JavaScript框架:了解常见的JavaScript框架(如React、Angular、Vue.js)的特点及其对爬虫的影响

以上的相关内容大家自行了解,一搜关键字就有很多详细科普了,了解了之后就可以正式开启网页爬虫之旅了~

(二)查看网页源代码

我认为开始爬虫实践的第一步,是会查看网页源代码,下面列举的是几种常用方法:

1.使用浏览器的“查看源代码”功能

• 右键菜单:在网页上右键点击,选择“查看网页源代码”或类似的选项。

• 快捷键:在某些浏览器中,可以使用快捷键 Ctrl + U (Windows/Linux)或 Cmd + Option + U (Mac)来打开源代码视图。

2. 使用浏览器的开发者工具(不仅可以查看HTML源码,还可以查看CSS和JavaScript等)

• 打开开发者工具:可以通过按下 F12 键或右键点击网页选择“检查”来打开开发者工具。

• 查看源代码:在开发者工具中,通常有一个“Elements”或“Inspector”选项卡,在这里可以看到HTML源代码,并且可以逐层展开查看各个元素。

3. 保存网页为HTML文件后查看

• 保存网页:可以将网页保存为完整的HTML文件。

• 使用文本编辑器打开:使用文本编辑器打开保存的HTML文件,查看源代码。

我使用的是第二种源代码查阅方法,打开界面如下:

单击代码显示框左侧的导航栏第一个图标之后,将光标移动到你想看的网页内容并选中,会自动跳转到对应代码

 

 (三)获取百度新闻网页源代码

学会如何看懂网页源代码之后,尝试怎么通过python程序获取吧!

1.源代码

这里需要特别注意的是headers的内容,headers={''}中,单引号里面的内容是用户代理,我们使用的浏览器都有不同的用户代理(相当于我们的个人名片),因为有些网站会设置反爬虫机制,但是我们平时通过浏览器又可以正常访问,headers这句话的作用就是把python程序伪装成浏览器访问网站,不建议在爬取网站的时候用我们自己的用户代理,因为实训过程中频繁爬取也会被网站发现,被ban了之后我们至少有一段时间都不能用自己的浏览器访问目标网站了,所以大家可以在网上找一些虚拟的用户代理。

import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; rv,2.0.1) Gecko/20100101 Firefox/4.0.1'}
url='https://news.baidu.com/'
res=requests.get(url, headers=headers).text
print(res)

2.运行结果

......(比较长,这里就不放完整截图了) 

(四)正则表达式

正则表达式是一种强大的文本匹配工具,用于描述字符串模式,可以用于搜索、替换或提取文本中的特定模式。网页源代码中蕴含的文字、标签很多,我们想从中筛选出自己所需要的关键信息(也就是数据清洗)时,就需要使用正则表达式,这里仅列举一些常用的清洗方式,大家根据需求自行拓展。

1.findall()函数

• 简介:findall()函数是Python的re模块中用于查找所有匹配项的一个非常有用的函数。它可以用来搜索一个字符串中的所有匹配项,并将它们作为一个列表返回。

• 基本语法:

re.findall(pattern, string, flags=0)

pattern:要匹配的正则表达式;
string:要搜索的字符串;
flags:可选参数,用于指定匹配模式,如忽略大小写、多行模式等。

• 使用示例:

2.非贪婪匹配

• 简介:非贪婪匹配(也称为懒惰匹配或最小匹配)是指在使用正则表达式时,尽可能少地匹配字符,例如,当你试图匹配一个标签内部的内容时,非贪婪匹配可以确保你只匹配到标签内部的内容而不包括后面的其他内容。

1)非贪婪匹配之(.*?)

(.*? )是用于表示非贪婪匹配任意数量的任意字符,具体含义如下:

(  ):表示一个捕获组,用于捕获匹配的文本;

.:匹配任意单个字符(除了换行符);

*:表示前面的模式可以出现零次或多次;

?:使前面的量词变为非贪婪模式,即尽可能少地匹配字符。

• 使用示例:

2)非贪婪匹配之.*?

(就是少了上文有括号的功能)

.:匹配任意单个字符(除了换行符);

*:表示前面的模式可以出现零次或多次;

?:使前面的量词变为非贪婪模式,即尽可能少地匹配字符。

• 使用示例:

 3.自动考虑换行的修饰符re.S

• 简介:re.S 是一个修饰符,它使“."可以匹配包括换行符在内的任何字符。默认情况下,"." 不会匹配换行符,但是使用 re.S 修饰符后,“.”就可以匹配任何字符,包括换行符。

使用示例:

 4.sub()函数

• 简介:sub()函数用于在字符串中查找并替换匹配的模式,它允许使用正则表达式来指定要替换的模式,并提供替换文本。

• 基本语法:

re.sub(pattern, repl, string, count=0, flags=0)

pattern:要匹配的正则表达式;
repl:用于替换匹配项的字符串或函数;
string:要搜索和替换的原始字符串;
count:可选参数,指定最大替换次数。默认为0,表示替换所有匹配项;
flags:可选参数,用于指定匹配模式,如忽略大小写、多行模式等。

• 使用示例:

 常见清洗应用就讲到这里,接下来尝试应用吧~

(五)提取百度新闻标题、网址、日期及来源

1.爬取一家公司的百度新闻

1)源代码
import requests
import re
headers = {'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)'}
url = 'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&rsv_dl=ns_pc&word=%E4%BA%AC%E4%B8%9C'
res = requests.get(url, headers=headers).text
# print(res) #  检验是否爬取成功 

p_title = '<h3 class="news-title_1YtI1 ">.*?>(.*?)</a>'  # 标题
title = re.findall(p_title, res, re.S)
# print(title) #  检验是否爬取成功
p_href = '<h3 class="news-title_1YtI1 ">.*?<a href="(.*?)"'  # 网址
href = re.findall(p_href, res, re.S)
# print(href) #  检验是否爬取成功 

p_data = '<span class="c-color-gray2 c-font-normal c-gap-right-xsmall".*?>(.*?)</span>'  # 日期
data = re.findall(p_data, res, re.S)
# print(data) #  检验是否爬取成功 

p_source = '<span class="c-color-gray".*?>(.*?)</span>'  # 来源
source = re.findall(p_source, res, re.S)
# print(source) #  检验是否爬取成功 

for i in range(len(title)):
    title[i] = title[i].strip()
    title[i] = re.sub('<.*?>', '', title[i])
    print(str(i+1) + '.' + title[i] + '(' + data[i] + '-' + source[i] + ')')
    print(href[i])
2)程序运行结果

 2.批量爬取多家公司的百度新闻

1)源代码
import requests
import re
headers = {'User-Agent':'CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'}

def baidu(company, page):
    num = (page - 1)*10
    url = 'https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=' + company + '&pn=' + str(num)
    res = requests.get(url, headers=headers).text

    p_title = '<h3 class="news-title_1YtI1 ">.*?>(.*?)</a>'  # 标题
    title = re.findall(p_title, res, re.S)
    # print(title) #  检验是否爬取成功
    p_href = '<h3 class="news-title_1YtI1 ">.*?<a href="(.*?)"'  # 网址
    href = re.findall(p_href, res, re.S)
    # print(href) #  检验是否爬取成功 

    p_data = '<span class="c-color-gray2 c-font-normal c-gap-right-xsmall".*?>(.*?)</span>'  # 日期
    data = re.findall(p_data, res, re.S)
    # print(data) #  检验是否爬取成功 

    p_source = '<span class="c-color-gray".*?>(.*?)</span>'  # 来源
    source = re.findall(p_source, res, re.S)
    # print(source) #  检验是否爬取成功 

    for i in range(len(title)):
        title[i] = title[i].strip()
        title[i] = re.sub('<.*?>', '', title[i])

        print(str(i+1) + '.' + title[i] + '(' + data[i] + ')')
        print(href[i])

companys = ['药康生物', '武汉凡谷', '四川九洲', '淘宝', '东方财富']
for company in companys:
    for i in range(20):
        baidu(company, i+1)
        print(company + '第' + str(i+1) + '页爬取成功')
2)程序运行结果

 以上就是博主所做爬虫技术基础的网页源代码获取和数据清洗的实训,后续还会更新进一步处理措施,希望能对广大求学者有所帮助! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值