小象学院_Python数据分析_第二讲_数据采集与操作

常用格式的本地数据读写

 txt, csv, json, xml, xls, xlsx, HDF 
 其他可以转换成以上格式的数据文件,如GIS中的.dbf可以导出成.csv文件

txt

由字符串组成,每行由EOL(End Of Line)字符隔开,'\n'
打开文件 *注意编码*
file_obj = open(filename, access_mode)
access_mode: 'r', 'w'
读操作
    -file_obj.read()读取整个文件内容
    -file_obj.readline()逐行读取
    -file_obj.readlines()返回列表,列表中的每个元素是行内容
写操作
    -file_obj.write()将内容写入文件
    -file_obj.writelines()将字符串列表内容逐行写入文件
关闭文件
    -file_obj.close()
with语句
    -包括了异常处理,自动调用文件关闭操作,推荐使用
    -适用于对资源进行访问的场合,确保无论使用过程中是否发生异常都会执行“清理”操作,如文件的关闭、线程的自动获取与释放等
    -with open(filename) as f_obj:
        # 执行相关操作

CSV(Comma-Separated Values)

-以纯文本形式存储的表格数据(以逗号作为分隔符),通常第一行为列名
-文件操作
    -numpy 的 np.loadtxt(), 较复杂
    -利用pandas处理,快捷方便
-读操作
    -df_obj = pd.read_csv(), 返回DataFrame类型的数据
-写操作
    -df_obj.to_csv()

Pandas

-基于NumPy构建
-索引在左,数值在右,索引是pandas自动创建的
-数据结构
    -Series, 类似于一维数组的对象
    -DataFrame, 表格型数据结构, 每列可以是不同的数据类型,可表示二维或更高维的数据

JSON(JavaScript Object Notation)

-轻量级的数据交换格式
-语法规则
        - 数据是键值对
        - 由逗号分隔
        - {}保存对象,如{key1:val1, key2:val2}
        - []保存数组,如[val1, val2,...,valn]
-读操作
    -json.load(file_obj)
    -返回值是dict类型
-类型转换 json -> csv
-编码操作
    -json.dumps()
    -编码注意:ensure_ascii=False

XLS/XLSX(Excel文件)

  • 常用的电子表格数据
  • 文件操作
    利用Pandas处理,快捷方便
  • 读操作
    • df_obj = pd.read_excel(), 返回DataFrame类型的数据
  • 写操作
    • df_obj.to_excel()
  • 具体见pandas如何处理CSV文件

    Python的数据库基本操作

    SQLite

  • 关系型数据库管理系统

  • 嵌入式数据库,适用于嵌入式设备
  • SQLite不是C/S的数据库引擎
  • 集成在用户程序中
  • 实现了大多数的SQL标准
  • 连接数据库
    • conn = sqlite3.connect(db_name)
      • 如果db_name存在,读取数据库
      • 否则,新建
  • 获取游标
    • conn.cursor()
    • 一段私有的SQL工作区,用于暂时存放受SQL语句影响的数据
  • CRUD操作
    • cursor.execute(sql_str)
    • cursor.executemany(sql_str)批量操作
  • fetchone(), 拿到一条记录
  • fetchall()
  • conn.commit(), 提交操作
  • 关闭连接:conn.close()

    其他常用的数据库的连接

  • MySQL

  • PostgreSQL
  • MongoDB
  • Oracle

    数据库多表连接

    多表连接

  • 查询记录时将多个表中的记录连接(join)并返回结果

  • join方式

    • 交叉连接(cross join)
    • 内连接(inner join)
    • 外链接(outer join)
  • cross join

    • 生成两张表的笛卡尔积
    • 返回的记录数为两张表的记录数的乘积
  • inner join

    • 生成两张表的交集
    • 返回的记录数为两张表的交集的记录数
  • outer join

    • left join(A,B), 返回表A的所有记录,另外表B中匹配的记录有值,没有匹配的记录返回null
    • right join(A,B), 返回表B的所有记录,另外表A中匹配的记录有值,没有匹配的记录返回null
      • [注]:目前在sqlite3中不支持右连接,可以考虑交换A、B表操作

    爬虫简介

    爬虫

  • 自动抓取互联网信息的程序
  • 利用互联网数据进行分析、开发产品

    爬虫基本架构

  • URL管理模块

    • 对计划爬取的或已经爬取的URL进行管理
  • 网页下载模块

    • 将URL管理模块中指定的URL进行访问下载
  • 网页解析模块

    • 解析网页下载模块中的URL,处理或保存数据
    • 如果解析到要继续爬取的URL,返回URL管理模块继续循环

    URL管理模块

  • 防止重复爬取或循环指向

  • 实现方式

    • Python的set数据结构
    • 数据库中的数据表
    • 缓存数据库redis,s适用于大型互联网公司

    URL下载模块

  • 将URL对应的网页下载到本地或读入内存(字符串)
  • 实现方式
    • urllib
    • requests或其他第三方的模块
  • 通过URL直接下载

    • response = urllib.request.urlopen(url)
    • response.getcode()
    • response.read()
  • 通过Request访问下载

request = urllib.request.Request(url)
request.add_head()
request.add_data()
response = urllib.urlopen(request)
  • 通过Cookie访问下载
  • 使用http.cookiejar模块
cookie_jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener()
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)

网页解析模块

  • 从已经下载的网页中爬取数据
  • 实现方式
    • 正则表达式,字符串的模糊匹配
    • html.parser
    • BeautifulSoup, 结构化的网页解析
    • lxml
  • 结构化解析
  • DOM(Document Object Model), 树形结构

    BeautifulSoup

  • 用于解析HTML或XML

  • pip install beautifulsoup4
  • import bs4
  • 步骤

    • 创建BeautifulSoup对象
      • bs = BeautifulSoup(
        - url
        - html_parser, # 指定解析器
        - encoding, # 确保和网页编码格式一致
        - )
    • 查询节点
      • find, 找到第一个满足条件的节点
      • find_all, 找到所有满足条件的节点
      • <a href = "a.html" class = "a_link">next page</a>
      • 可按节点类型、属性或内容访问
      • 按类型查找节点 : bs.find_all(‘a’)
      • 按属性查找节点
        • bs.find_all(‘a’, href = ‘a.html’)
        • bs.find_all(‘a’, href = ‘a.html’, string = ‘next page’)
        • bs.find_all(‘a’, class_ = ‘a_link’) 注意:是 class_
    • 获取节点信息
      • node是已查找到的节点
      • node.name:获取节点标签名称
      • node[‘href’] : 获取节点href属性
      • node.get_text(): 获取节点文字
    • 异常处理
      • 网络资源或URL是经常变动的
      • 需要处理异常

    BeautifulSoup进阶

  • 使用CSS方式、正则表达式查找节点

  • 保存解析的内容
  • DOM树形结构
    • children 只返回“孩子”节点
    • desecdants 返回所有“子孙”节点
    • next_siblings 返回下一个“同辈”节点
    • previous_siblings 返回上一个“同辈”节点
    • parent 返回“父亲”节点
  • 正则表达式

    Scrapy简介

  • 开源的爬虫框架
  • 用户群: https://scrapy.org/companies/

    Scrapy抓取过程

  • 使用start_urls作为初始url生成Request, 默认将parse作为它的回调函数
  • 在parse函数中解析目标url

    Scrapy高级特性

  • 内置数据抽取器css/xpath/re
  • 交互式控制台用于调试
  • 结果输出的格式支持, JSON, CSV, XML等
  • 自动处理编码
  • 支持自定义扩展

    Scrapy使用步骤

    1. 创建工程
      • scrapy startproject air_quality
      • 目录结构
    1. 定义Item, 构造爬取的对象(可选)
      • scrapy.Field()
    1. 编写Spider, 爬虫主体
    1. 编写配置和Pipeline, 用于处理爬取的结果(可选)
      • 默认return item
    1. 执行爬虫
      • scrapy crawl aqi_history_spider

    Scrapy常用命令

  • help: 查看帮助, scrapy –help
  • version: 查看版本信息
    • scrapy version, 查看scrapy 版本
    • scrapy version -v, 查看相关模块的版本
  • stratproject, 新建工程 scrapy startproject proj_name
  • genspider
  • list, 列出所有spider, crapy list
  • view, 返回网页源代码并在浏览器中打开, scrapy view url
    • 有时页面渲染的结果和查看结果是不同的
  • parse, 调用工程spider中的parse解析url, scrapy parse url
  • shell , 进入交互式调试模式,scrapy shell url
  • bench, 可以用来检测scrapy 是否安装成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值