其他分享
首页 > 其他分享> > 网络爬虫和openpyxl模块

网络爬虫和openpyxl模块

作者:互联网

re模块

re模块基础使用

import re

res = re.findall('r', 'barry run rr')  # 筛选符合正则表达式的数据
print(res)
# run:['r', 'r', 'r', 'r', 'r']
import re

res = re.finditer('r', 'barry run rr')  # 筛选符合正则表达式的数据处理成迭代器对象
print(res)
# run:<callable_iterator object at 0x000001AC9DED8430>
print(res.__next__())
# run:<re.Match object; span=(2, 3), match='r'>
import re

res = re.search('r', 'barry run rr')  # 筛选一个符合正则表达式的数据就结束
print(res)
# run:<re.Match object; span=(2, 3), match='r'>
print(res.group())
# run:r
import re

res = re.match('r', 'barry run rr')  # 只筛选开始的一个数据是否符合正则表达式
print(res)
# run:None
res = re.match('r', 'rry run rr')  # 只筛选开始的一个数据是否符合正则表达式
print(res)
# run:<re.Match object; span=(0, 1), match='r'>
print(res.group())
# run:r
import re

res = re.compile('r')  # 提前准备好正则表达式
print(re.findall(res,  'rry run rr'))
# run:['r', 'r', 'r', 'r', 'r']
print(re.findall(res, 'ekwererkrk23'))
# run:['r', 'r', 'r']

img

re模块补充

res = re.findall('a(b)cd', 'abcdabcdabcd')  #  findall优先展示括号内匹配的结果
print(res)
# run:['b', 'b', 'b']
res = re.findall('a(b)(c)d', 'abcdabcdabcd')  # 若有两个括号,则优先展示括号内匹配的结果,在将结果组成元组组成列表
print(res)
# run:[('b', 'c'), ('b', 'c'), ('b', 'c')]
res = re.findall('a(?:b)cd', 'abcdabcdabcd')  #  findall在括号内加?:可以取消优先展示
print(res)
# run:['abcd', 'abcd', 'abcd']
res = re.search('a(b)(c)d', 'abcdabcdabcd')  # 优先展示括号内匹配的结果
print(res.group())  # 加group取消优先展示
# run:abcd
print(res.group(0))  # group括号内是0和没有一样是取消优先展示
# run:abcd
print(res.group(1))  # group括号内是1优先展示第1个括号的匹配结果
# run:b
print(res.group(2))  # group括号内是2优先展示第2个括号的匹配结果
# run:c
res = re.search('a(?P<id>b)(?P<name>c)','abcdabcdabcd')  # 在()内?P<后写名字>后写名字对应的筛选条件
print(res.group())  # 加group取消优先展示
# run:abc
print(res.group(1))  # group括号内是1优先展示第1个括号的匹配结果
# run:b
print(res.group('id'))  # group括号内可以根据名字获取名字对应的匹配结果
# run:b
print(res.group('name'))  # group括号内可以根据名字获取名字对应的匹配结果
# run:c

网络爬虫

网络爬虫简介

1.互联网
互联网可以将计算机连接到一起,让接入互联网的计算机可以共享数据,有些计算机是专门让别人访问的,被称为服务器,让我们可以通过互联网使用别人的资源

2.网络爬虫的本质
网络爬虫是一种按照一定的规则,自动从抓取信息的程序
模拟计算机浏览器朝目标网址发送请求回去数据并筛选
只要浏览器可以访问的数据网络爬虫理论上都可以

3.网络爬虫虽然好用,但要合法使用,不然一不小心就会获得银手镯

img

第三方模块下载

1.第三方模块需要下载才可以导入使用,python下载第三方模块需要pip工具
2.下载命令
pip3.8 install 模块名
3.下载的问题
3.1下载速度很慢
pip工具默认从国外下载模块,可以更换下载地址源
pip3.8 install 模块名 -i 源地址
"""
下载源地址
中科院:https://pypi.mirrors.ustc.edu.cn/simple/
清华大学 :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/
"""
3.2下载报错
"""
1.pip工具版本过低,拷贝信息提示里的共享命令即可
python38 -m pip install --upgrade pip
2.网络不稳定 报错关键字Read timed out
只能重新下载,或者换一个稳定的网络
3.有些模块在下载使用之前需要提前配置指定的环境
"""
4.模块也有版本
pip3.8 install 模块名==版本号
pycharm也可以下载模块
File>>>settings>>>project:文件夹名>>>python lnterpreter
在右侧的界面中是现在有的模块信息,随便双击一个模块,在上方的搜索条中可以搜索需要下载的模块,点击需要下载的模块名,在点击lnstall Package下载
在lnstall Package右侧的Manage Repositories可以添加或删除下载源地址

爬取信息

红牛分公司	http://www.redbull.com.cn/about/branch

import requests

res = requests.get('http://www.redbull.com.cn/about/branch')  # 朝目标地址发送网络请求获取地址的页面数据
print(res.content)  # 获取bytes类型的数据
print(res.text)  # 获取解码之后的数据
with open(r'hn.html', 'wb') as f:
    f.write(res.content)  # 将获取的数据储存到文件,之后使用起来更加的方便

import re

with open(r'hn.html', 'r', encoding='utf8') as f:
    data = f.read()  # 读取储存在文件里的页面数据
print(data)

company = re.findall('<h2>(.*?)</h2>', data)  # 在分公司名字的前后字符中间用括号将.*?括起来
# print(company)  # 所有分公司的名字会组成列表

address = re.findall("data-describe='(.*?)'><h2>", data)  # 在分公司地址的前后字符中间用括号将.*?括起来
# print(address)  # 所有分公司的地址会组成列表

mailbox = re.findall("class='mailIco'>(.*?)</p><p", data)  # 在分公司邮箱的前后字符中间用括号将.*?括起来
# print(mailbox)  # 所有分公司的邮箱会组成列表

phone = re.findall("class='telIco'>(.*?)</p>", data)  # 在分公司电话的前后字符中间用括号将.*?括起来
# print(phone)  # 所有分公司的电话会组成列表

info = zip(company, address, mailbox, phone)  # 将列表内的数据值一个对一个取出组成元组,将这些元组组成列表

for i in info:  # 循环打印出来
    print("""
    公司名称:%s
    公司地址:%s
    公司邮箱:%s
    公司电话:%s
    """ % i)
img

openpyxl模块

openpyxl模块有什么用

1.我们可以通过openpyxl模块操作Excel表格
2在python中能够Excel表格的模块有很多,openpyxl模块是近年来用的较多的模块,表格openpyxl模块对03年之前的版本兼容性不好
3.xlwt、xlrd也可以操作Excell表格,可以兼容所有版本的Excel表格,但没有openpyxl简单
4.分辨Excel版本
03年之前的excel文件的后缀名 .xls
03年之后的excel文件的后缀名 .xlsx

openpyxl模块的使用

from openpyxl import Workbook  # 导入模块

wb = Workbook()  # 创建Excel文件
wb1 = wb.create_sheet('魏国')  # 创建表格名字
wb2 = wb.create_sheet('蜀国', 0)  # 可选择表格位置
wb1.title = '曹操'  # 可以修改表格的名字
wb1.sheet_properties.tabColor = '1072BA'  # 修改表格的颜色


wb2['B2'] = '赵云'  # 将赵云写入表格的B行2列

wb2.cell(row=3, column=1, value='关羽')  # 将关羽写入表格的3行1列
# 批量写入
wb2.append(['name', 'pwd', 'age', 'hobby'])
wb2.append(['jay', '123', '20', 'run'])
wb2.append(['barry', '123', '20', 'run'])
wb2.append(['wally', '123', '20', 'run'])
wb2.append(['bart', '123', '20', 'run'])

wb.save(r'110.xlsx')  # 保存文件
img

作业

# 尝试将红牛分公司数据保存到excel表格中

import requests
import re
from openpyxl import Workbook  # 导入模块

res = requests.get('http://www.redbull.com.cn/about/branch')  # 朝目标地址发送网络请求获取地址的页面数据
print(res.content)  # 获取bytes类型的数据
print(res.text)  # 获取解码之后的数据
with open(r'hn.html', 'wb') as f:
    f.write(res.content)  # 将获取的数据储存到文件,之后使用起来更加的方便
with open(r'hn.html', 'r', encoding='utf8') as f:
    data = f.read()  # 读取储存在文件里的页面数据
company = re.findall('<h2>(.*?)</h2>', data)  # 在分公司名字的前后字符中间用括号将.*?括起来
address = re.findall("data-describe='(.*?)'><h2>", data)  # 在分公司地址的前后字符中间用括号将.*?括起来
mailbox = re.findall("class='mailIco'>(.*?)</p><p", data)  # 在分公司邮箱的前后字符中间用括号将.*?括起来
phone = re.findall("class='telIco'>(.*?)</p>", data)  # 在分公司电话的前后字符中间用括号将.*?括起来
info = zip(company, address, mailbox, phone)  # 将列表内的数据值一个对一个取出组成元组,将这些元组组成列表
wb = Workbook()  # 创建Excel文件
wb1 = wb.create_sheet('红牛信息')  # 创建表格名字
wb1.append(['分公司名', '分公司地址', '分公司邮箱', '分公司电话'])
for company, address, mailbox, phone in info:  # 将信息分成不同的变量名来循环
    wb1.append([company, address, mailbox, phone])  # 将循环的信息写入Excel表格
wb.save(r'110.xlsx')  # 保存文件

标签:run,openpyxl,括号,res,爬虫,re,模块,print
来源: https://www.cnblogs.com/riuqi/p/16499818.html