python进阶之路21 正则应用 第三方模块之requests模块 openpyxl模块 简易爬虫(pandas)
作业讲解
"""
网络爬虫没有我们现在接触的那么简单
有时候页面数据无法直接拷贝获取
有时候页面还存在防爬机制 弄不好ip会被短暂拉黑
"""
http://www.redbull.com.cn/about/branch 红牛各公司信息
1.直接拷贝页面数据到本地文件
2.读取文件内容当作字符串处理
3.编写正则筛选内容
import re
# 1.文件操作读取文本内容
with open(r'redbull.html', 'r', encoding='utf8') as f:
# 2.直接读取全部内容 无需优化
data = f.read()
# 3.研究各部分数据的特征 编写相应的正则表达式
"""
1.思路1:
一次性获取每个公司全部的数据
分部挨个获取最后统一整合
"""
res = re.findall("<h2>(.*?)</h2><p class='mapIco'>(.*?)</p><p class='mailIco'>(.*?)</p><p class='telIco'>(.*?)</p>",data)
# print(res) # [(),(),(),()]
complany_title_list = re.findall('<h2>(.*?)</h2>', data)
# print(complany_title_list)
complany_address_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# print(complany_address_list)
complany_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# print(complany_email_list)
complany_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
# print(complany_phone_list)
res = zip(complany_title_list,complany_address_list,complany_email_list,complany_phone_list)
# print(list(res)) # [(),(),(),()]
with open(r'comp_info.txt', 'w', encoding='utf8')as f:
for data_tuple in res:
print(
"""
公司名称:%s
公司地址:%s
公司邮编:%s
公司电话:%s
""" % data_tuple
)
f.write(
"""
公司名称:%s
公司地址:%s
公司邮编:%s
公司电话:%s\n
""" % data_tuple)
第三方模块讲解
第三方模块:别人写的模块 一般情况下功能都特别强大
我们如果想使用第三方模块 第一次必须先下载 后面才可以反复使用(等同于内置模块)
下载第三方模块的方式
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提供快捷方式
file---settings---project----python interpreter---界面双击搜索 install package
"""
下载第三方模块可能会出现的问题
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 仓库地址
pip的仓库地址很多 直接搜
清华大学 :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/
"""
网络爬虫模块之requests模块
requests能模拟浏览器发送网络请求 获取页面数据
import requests
# 1.朝指定网址发送请求获取页面数据(等价于:浏览器地址栏输入网址回车访问)
res = requests.get('http://www.redbull.com.cn/about/branch')
print(res)
print(res.content) # 获取bytes类型的网页数据(二进制)
res.encoding = 'utf8' # 指定编码
print(res.text) # 获取字符串类型的网页数据(默认按照utf8)
res = requests.get('https://www.autohome.com.cn/beijing/')
print(res.text) # 汽车之家
### 网络爬虫实战之爬取链家二手房数据
```python
import re
import requests
res = requests.get('https://sh.lianjia.com/ershoufang/pudong/')
# print(res.text)
data = res.text
home_title_list = re.findall('<a class="" href=".*?" target="_blank" data-log_index=".*?" data-el="ershoufang" data-housecode=".*?" data-is_focus="" data-sl="">(.*?)</a>',data)
# print(home_title_list)
home_name_list = re.findall('<a href=".*?" target="_blank" data-log_index=".*?" data-el="region">(.*?) </a>',data)
# print(home_name_list)
home_street_list = re.findall('<div class="positionInfo"><span class="positionIcon"></span><a href=".*?" target="_blank" data-log_index=".*?" data-el="region">.*? </a> - <a href=".*?" target="_blank">(.*?)</a> </div>',data)
# print(home_street_list)
home_info_list = re.findall('<div class="houseInfo"><span class="houseIcon"></span>(.*?)</div>',data)
# print(home_info_list)
home_watch_list = re.findall('<div class="followInfo"><span class="starIcon"></span>(.*?)</div>',data)
# print(home_watch_list)
home_total_price_list = re.findall('<div class="priceInfo"><div class="totalPrice totalPrice2"><i> </i><span class="">(.*?)</span><i>万</i></div>',data)
# print(home_total_price_list)
home_unit_price_list = re.findall('<div class="unitPrice" data-hid=".*?" data-rid=".*?" data-price=".*?"><span>(.*?)</span></div></div>',data)
# print(home_unit_price_list)
home_data = zip(home_title_list,home_name_list,home_street_list,home_info_list,home_watch_list,home_total_price_list,home_unit_price_list)
# print(list(home_data))
with open(r'home_data.txt','w',encoding='utf8')as f:
for data in list(home_data):
print(
"""
房屋标题:%s
小区名称:%s
街道名称:%s
详细信息:%s
关注程度:%s
房屋总价:%s
房屋单价:%s
""" % data)
f.write("""
房屋标题:%s
小区名称:%s
街道名称:%s
详细信息:%s
关注程度:%s
房屋总价:%s
房屋单价:%s\n
""" % data )
自动化办公领域之openpyxl模块
1.excel文件的后缀名问题
03版本之前
.xls
03版本之后
.xlsx
2.操作excel表格的第三方模块
xlwt往表格中写入数据、wlrd从表格中读取数据
兼容所有版本的excel文件
openpyxl最近几年比较火热的操作excel表格的模块
03版本之前的兼容性比较差
ps:还有很多操作excel表格的模块 甚至涵盖了上述的模块>>>:pandas
from openpyxl import Workbook
# 创建一个excel文件
wb = Workbook()
# 在一个excel文件内创建多个工作簿
wb1 = wb.create_sheet('帅哥')
wb2 = wb.create_sheet('美女')
wb3 = wb.create_sheet('大长腿')
# 还可以修改默认工作簿位置
wb4 = wb.create_sheet('富婆名单',0)
# 还可以二次修改工作簿名称
wb4.title = '高富帅排行榜'
# 还可以改工作簿的颜色
wb4.sheet_properties.tabColor = "1072BA"
# 填写数据的方式1
# wb4['F4'] = 666
# 填写数据的方式2
# wb4.cell(row=3, column=1, value='jason')
# # 填写数学公式
# wb4.cell(row=1, column=1, value=22222)
# wb4.cell(row=2, column=1, value=44444)
# wb4.cell(row=3, column=1, value=4444)
# wb4.cell(row=4, column=1, value=4444)
# wb4['A5'] = '=sum(A1:A4)'
# wb4.cell(row=8,column=5,value='=sum(A1:A4)')
# 填写数据的方式3
# wb4.append(['编号','年龄','姓名','爱好']) # 表头字段
# wb4.append(['1','12','jason','111'])
# wb4.append(['2','13','kevin','222'])
# wb4.append(['3','14','jerry','333'])
# wb4.append(['4','16','tom','444'])
'''多了少了 正常写入'''
# 保存excel文件
wb.save(r'111.xlsx')
"""
openpyxl主要用于数据的写入 至于后续的表操作它并不是很擅长 如果想做需要更高级的模块pandas
import pandas
data_dict = {
"公司名称":complany_title_list,
"公司地址":complany_address_list,
"公司邮编":complany_email_list,
"公司电话":complany_phone_list}
# 将字典转换成pandas 里面的DataFrame数据结构
df = pandas.DataFrame(data_dict)
# 直接保存成excel文件
df.to_excel(r'pd_comp_info.xlsx')
excel软件正常可以打开操作的数据集在10万左右 一旦数据集过大 软件操作几乎无效
需要使用代码操作>>>:pandas模块
"""
openpyxl读取数据
from openpyxl import load_workbook
# 1.指定读取的文件
wb = load_workbook(r'111.xlsx',data_only=True)
# 2.查看内部所有工作薄名称
# print(wb.sheetnames) # ['高富帅排行榜', 'Sheet', '帅哥', '美女', '大长腿']
# 3.指定某个工作薄
wb1 = wb['帅哥']
# 4.读取工作薄相关操作
# print(wb1.max_row) # 获取最大列数
# print(wb1.max_column) # 获取最大行数
# print(wb1['A3'].value) # 读取单元格内容
# print(wb1['A8'].value) # 如果是公式 读取的是公式 如果想要读取结果 需要加参数data_only
# for i in wb1.rows:
# print([d.value for d in i])
# for j in wb1.rows:
# print([d.value for d in j])
import pandas
print(pandas.read_excel(r'111.xlsx', ))
python进阶之路21 正则应用 第三方模块之requests模块 openpyxl模块 简易爬虫(pandas)的更多相关文章
- python进阶05 常用问题库(1)json os os.path模块
python进阶05 常用问题库(1)json os os.path模块 一.json模块(数据交互) web开发和爬虫开发都离不开数据交互,web开发是做网站后台的,要跟网站前端进行数据交互 1.什 ...
- python进阶之路16 模块入门
索引取值与迭代取值的差异 l1 = [11,22,33,44,55] 1.索引取值 可以任意位置任意次数取值 不支持无序类型的数据取值 2.迭代取值 只能从前往后依次取值无法后退 支持所有类型的数据取 ...
- 10月26日内容总结——第三方模块下载与requests、openpyxl模块
目录 一.第三方模块的下载与使用 下载第三方模块的方式一:pip工具 部分错误解决案例: 下载第三方模块的方式二:pycharm中下载 pip仓库地址 二.网络爬虫模块之requests模块 1.ge ...
- python进阶(十七)正则&json(上)
1. 一个列表中所有的数字都是重复2次,但是有一个数字只重复了一次. 请找出重复一次的数字,不可以使用内置函数. [2,2,1,1,0,4,3,4,3] 方法1:通过字典计数,找到value等于1的k ...
- Python进阶之路---1.4python数据类型-数字
python入门基础 声明:以后python代码未注明情况下,默认使用python3.x版本 1.python代码基础:print print('hello,python') 1.1pyt ...
- [Python自学] day-18 (1) (JS正则、第三方组件)
一.JS的正则表达式 JS正则提供了两个方法: test():用于判断字符串是否符合规定: exec():获取匹配的数据: 1.test() 定义一个正则表达式: reg = /\d+/; // 用于 ...
- python进阶之路20 正则表达式 re模块
正则表达式前情 案例:京东注册手机号校验 基本需求:手机号必须是11位.手机号必须以13.15.17.18.19开头.必须是纯数字 '''纯python代码实现''' # while True: # ...
- python进阶之路15 之异常处理、生成器相关
异常捕获处理 1.异常 异常就是代码运行报错 行业术语叫bug 代码运行中一旦遇到异常会直接结束整个程序的运行 我们在编写代码的过程中要尽可能避免 2.异常分类 语法错误 不允许出现 一旦出现立刻改正 ...
- python进阶之路14 之函数内置方法、可迭代对象、异常捕获处理
重要内置函数 1.map() 映射 l1 = [1, 2, 3, 4, 5] # def func(a): # return a+1 res = map(lambda x:x+1, l1) print ...
随机推荐
- 13.MongoDB系列之分片简介
1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...
- 后端框架的学习----mybatis框架(8、lombok)
8.lombok #测试环境搭建 1.导入lombok 2.新建实体类Teacher,Student 3.建立mapper接口 4.建立mapper.xml文件 5.在核心配置文件中绑定注册mappe ...
- Java多线程(6):锁与AQS(下)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现.既然它这么优秀,是骡子是马,就拉出来溜溜吧. 首先用重入锁来实现简单的累加,就像这 ...
- FlinkSql之TableAPI详解
一.FlinkSql的概念 核心概念 Flink 的 Table API 和 SQL 是流批统一的 API. 这意味着 Table API & SQL 在无论有限的批式输入还是无限的流式输入下 ...
- Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块
这是一篇系列博文,我将使用Abp.Zero搭建一套集成手机号免密登录验证与号码绑定功能的用户系统: Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块 Abp.Zero 手机号 ...
- JVM学习笔记——内存结构篇
JVM学习笔记--内存结构篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存结构部分 我们会分为以下几部分进行介绍: JVM整体介绍 程序计数器 虚拟机栈 本地方法栈 堆 方法 ...
- Java8新特性:函数式编程
1. 概述 函数式编程学习目的: 能够看懂公司里的代码 大数据量下处理集合效率更高 代码可读性高 消灭嵌套地狱 函数式编程思想: 面向对象思想需要关注用什么对象完成什么事情.而函数式编程思想就类似于我 ...
- 【深入浅出 Yarn 架构与实现】2-1 Yarn 基础库概述
了解 Yarn 基础库是后面阅读 Yarn 源码的基础,本节对 Yarn 基础库做总体的介绍.并对其中使用的第三方库 Protocol Buffers 和 Avro 是什么.怎么用做简要的介绍. 一. ...
- Linux环境下执行脚本重启Weblogic控制台中部署的应用程序
之前有写过一篇博文介绍切换登录方式的脚本,脚本中存在一个缺点:仍需手动去Weblogic控制台重启应用程序:本文即介绍如何在脚本中更新Weblogic控制台中部署的应用程序. 一.配置Weblogic ...
- js高级基础部分
基于尚硅谷的尚硅谷JavaScript高级教程提供笔记撰写,加入一些个人理解 github源码 博客下载 数据类型的分类和判断 主要问题 分类 基本(值)类型 Number ----- 任意数值 -- ...