python基础:第三方模块requests、openpyxl

一、爬虫小练习

# 思路
1.直接拷贝网友源代码数据保存到本地
2.在pycharm中读取文件当作字符串处理
3.编写正则表达式来筛选我们想要的内容

import re

# 1.文件操作读取文本内容
with open(r'redbull.html', 'r', encoding='utf8') as f:
    # 2 直接读取全部内,将全部内容绑定变量名data
    data = f.read()
# 3 研究各部分数据的特征,编写相应的正则表达式
# <h2>红牛杭州分公司</h2><p class='mapIco'>杭州市上城区庆春路29号远洋大厦11楼A座</p><p class='mailIco'>310009</p><p class='telIco'>0571-87045279/7792</p></li><li


"方法1:一次性获取每个公司全部的数据"
# res = re.findall(
#     "<h2>(.*?)</h2><p class='mapIco'>(.*?)</p><p class='mailIco'>(.*?)</p><p class='telIco'>(.*?)</p></li><li", data)
#
# print(res)


"方法2:分步分挨个获取最后统一整合"
title_list = re.findall("<h2>(.*?)</h2>", data)
# print(title_list)
"""
['红牛杭州分公司', ... ,'红牛金丽衢代表处']
"""
address_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
mail_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
telephone_list = re.findall("<p class='telIco'>(.*?)</p>", data)

# 4 (处理信息)得到了公司名称、公司地址、公司邮编、公司电话这些信息的列表后,我们需要将其一一对应起来组合
res = zip(telephone_list, address_list, mail_list, telephone_list)
# print(list(res))
# [('0571-87045279/7792', '杭州市上城区庆春路29号远洋大厦11楼A座', '310009', '0571-87045279/7792')...]


# 5 将其写入txt文件中
with open(r'redbull.txt', 'w', encoding='utf8') as f:
    # 6 添加for循环,可以格式化输出
    for data_tuple in res:
        print(
            """
            公司名称:%s
            公司地址:%s
            公司邮编:%s
            公司电话:%s
            """ % data_tuple)
        f.write(
            """
            公司名称:%s
            公司地址:%s
            公司邮编:%s
            公司电话:%s
            """ % data_tuple)

二、第三方模块的下载与使用

第三方模块,大佬写的模块,功能很多

1.下载第三方模块的方式

# 我们如果想使用第三方模块,第一次必须先下载后面才可以反复使用
    1.pip工具
          注意每个解释器都有pip工具 如果我们的电脑上有多个版本的解释器那么我们在使用pip的时候一定要注意到底用的是哪一个 否则极其任意出现使用的是A版本解释器然后用B版本的pip下载模块
      为了避免pip冲突 我们在使用的时候可以添加对应的版本号
          python27         pip2.7
          python36         pip3.6
          python38         pip3.8
      下载第三方模块的句式
         pip install 模块名
      下载第三方模块临时切换仓库
         pip install 模块名 -i 仓库地址
      下载第三方模块指定版本(不指定默认是最新版)
         pip install 模块名==版本号 -i 仓库地址
   2.pycharm提供快捷方式

image-20221026154541654

2.下载第三方模块可能会出现的问题

  1.报错并有警告信息
    WARNING: You are using pip version 20.2.1;
    原因在于pip版本过低 只需要拷贝后面的命令执行更新操作即可
    d:\python38\python.exe -m pip install --upgrade pip
    更新完成后再次执行下载第三方模块的命令即可
	
  2.报错并含有Timeout关键字
    说明当前计算机网络不稳定 只需要换网或者重新执行几次即可
	
  3.报错并没有关键字
    面向百度搜索
pip下载XXX报错:拷贝错误信息
    通常都是需要用户提前准备好一些环境才可以顺利下载
	
  4.下载速度很慢
    pip默认下载的仓库地址是国外的 python.org
    
   我们可以切换下载的地址为国内的地址
    # 命令行操作
    pip install 模块名 -i 仓库地址
		
    """常用的国内仓库地址
	清华大学 :https://pypi.tuna.tsinghua.edu.cn/simple/
	阿里云:http://mirrors.aliyun.com/pypi/simple/
	中国科学技术大学 :http://pypi.mirrors.ustc.edu.cn/simple/
	华中科技大学:http://pypi.hustunique.com/
	豆瓣源:http://pypi.douban.com/simple/
	腾讯源:http://mirrors.cloud.tencent.com/pypi/simple
	华为镜像源:https://repo.huaweicloud.com/repository/pypi/simple/"""
image-20221026162047439

三、网络爬虫模块之requests模块

1.简介

requests模块能够模拟浏览器发送网络请求
# Python 内置了 requests 模块,该模块主要用来发 送 HTTP 请求

1.requests模块的语法

# 1 导入 requests 包
import requests
# 2 发送请求
# 朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)
x = requests.get('http://www.redbull.com.cn/about/branch')
# 3 返回网页内容
print(x.text)  # 并非所有网站都是以utf8来进行字符编码的


2.requests模块语法的补充说明

# 1 获取bytes类型的网页数据(二进制)
print(x.content)  
# 2 可以指定字符编号,已经获取bytes类型的网页数据(二进制)
x.encoding = 'utf8'  # 指定编码
print(x.text)  # 获取字符串类型的网页数据(默认按照utf8)

requests模块的其他属性和方法:

https://www.runoob.com/python3/python-requests.html

2.网络爬虫实战之爬取*家二手房数据

"""
思路:
1.通过requests模块模拟浏览器向链家网站发送请求
2.返回网页内容
3.研究网页上的内容,编写对应的正则表达式
4.筛选出结果写入文件中
"""

import requests
import re


# 链家网站:https://sh.lianjia.com/ershoufang/pudong/

# 1 通过requests模块获取链家网站的内容
web_lj = requests.get('https://sh.lianjia.com/ershoufang/pudong/')
# 2 返回内容
data = web_lj.text
# 3 通过正则表达式来匹配数据,匹配我们想要的结果
house_title_list = re.findall(
    'data-is_focus="" data-sl="">(.*?)</a>',
    data)
print(house_title_list)
house_position_list = re.findall('<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?)</a>', data)
# print(house_position_list)
house_street_list = re.findall('-  <a href=".*?" target="_blank">(.*?)</a>', data)
# print(house_street_list)
house_info_list = re.findall('<div class="houseInfo"><span class="houseIcon"></span>(.*?)</div>', data)

house_follow_list = re.findall('<div class="followInfo"><span class="starIcon"></span>(.*?)</div>', data)

house_total_price_list = re.findall(
    '<div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>', data)

house_unit_price_list = re.findall(
    '<div class="unitPrice" data-hid=".*?" data-rid=".*?" data-price=".*?"><span>(.*?)</span></div>', data)

house_data = zip(house_title_list, house_position_list, house_street_list, house_info_list, house_follow_list,
                 house_total_price_list, house_unit_price_list)
# 4 创建文件保存数据
with open(r'sec_hand_house.txt','w',encoding='utf8') as f:
    for data in house_data:
        print("""
        房屋标题:%s
        小区名称:%s
        街道名称:%s
        详细信息:%s
        关注程度:%s
        房屋总价:%s万元
        房屋单价:%s
        """ % data
)
        f.write("""
        房屋标题:%s
        小区名称:%s
        街道名称:%s
        详细信息:%s
        关注程度:%s
        房屋总价:%s万元
        房屋单价:%s
        """ % data
)

四、自动化办公领域之openpyxl模块

1.openpyxl模块简介

1.excel文件的后缀名问题
2003版本之前后缀名为: .xls
2003版本之后后缀名为: .xlsx

2.操作excel表格的第三方模块
1)xlwt往表格中写入数据(兼容所有版本的excel文件)
2)wlrd从表格中读取数据(兼容所有版本的excel文件)
3)**openpyxl最近几年比较火热的操作excel表格的模块(对2003版本之前的兼容性较差 )

2.openpyxl操作

很多模块都会有官方文档,可以帮助我们了解如何使用该模块

Workbook

  • workbook 相当于一个 Excel 文件档,每个被创建和打开的 Excel 文件都是独立的 Workbook 对象
  • sheet Excel 文档中的表单,每个 Excel 文档至少需要一个 sheet
  • cell 单元格,是不可分割的基本数据存储单元
from openpyxl import Workbook

1.创建一个excel文件 `Workbook`关键字
wb = Workbook()

2.在一个excel文件内创建多个工作簿sheet  `create_sheet`
wb1 = wb.create_sheet('宿舍名单')
wb2 = wb.create_sheet('身份证信息')
wb3 = wb.create_sheet('电话信息')

3.修改默认的工作簿位置
# 在想修改的工作簿添加索引参数
wb4 = wb.create_sheet('女朋友电话', 0)

4.二次修改工作簿名称  `工作簿名.title = '新命名'`
wb4.title = '男神电话'
wb4.sheet_properties.tabColor = "1072BA"

5.填写数据
  1)wb4['A1'] = 'haha'
  2)wb4.cell(row=3, column=1, value='jason')
  3)类似表格的形式直接写入数据
    wb4.append(['编号', '姓名', '年龄', '爱好'])  # 表头字段
    wb4.append([1, 'jason', 18, 'read'])
    wb4.append([2, 'kevin', 28, 'music'])
    wb4.append([3, 'tony', 58, 'play'])
    wb4.append([4, 'oscar', 38, 'ball'])
    wb4.append([5, 'jerry', 'ball'])
    wb4.append([6, 'tom', 88,'ball','哈哈哈'])
    
6.填写数据额公式
# 默认是公式本身,不会出现结果,需要用value参数指定才会获取计算结果
    wb4['A5'] = '=sum(A1:A4)'
    wb4.cell(row=8, column=3, value='=sum(A1:A4)')
    
7.保存excel文件    
    wb.save(r'aaaa.xlsx') 

excel软件正常可以打开操作的数据集数量在10万左右

一旦数据集过大,软件操作几乎无效需要使用pandas模块进行代码操作

  • 模块openpyxl 主要用于数据的写入

  • 模块pandas 擅长表单操作

posted @ 2022-10-26 20:37  Duosg  阅读(140)  评论(0编辑  收藏  举报