re模块之网络爬虫基础

1.re模块

        在python中想要使用正则表达式 re模块是其中选择之一。


re模块的常用方法
序号方法用法
1findall列出字符串中模式的所有匹配项
2finditer将所有匹配到的项生成一个迭代器
3search在字符串中查找 。第一个匹配到的对象或者None(返回一个match对象)
4match在字符串的开始处匹配模式。 字符串开始没有则 None(返回一个match对象)
5compile提前设置好正则表达式后面可以直接调用
6match.group(index)将match对象拆分成字符串。不写index默认是0
7match.groups()将match对象转换成元组
import re  # 别忘了导包

res = re.findall('a','aa and bb and abc')
print(res) 
# ['a', 'a', 'a', 'a', 'a']

res = re.finditer('a','aa and bb and abc')
print(res)  # <callable_iterator object at 0x7f9c1aba5f70> 迭代器

res = re.search('a','aa and bb and abc')
print(res)        # <re.Match object; span=(0, 1), match='a'>
print(res.group()) # a


res = re.match('a','aa and bb and abc')
print(res)    # None


obj = re.compile('a')
print(re.findall(obj,'asdccecaawsa'))    # ['a', 'a', 'a', 'a']
print(re.findall(obj,'dsfsaaecacek'))    # ['a', 'a', 'a']

re模块之()用法:

1.分组操作

import re

res = re.findall('and','aandbandcandabc')
print(res)    # ['and', 'and', 'and']

res = re.findall('a(n)d','aandbandcandabc')
print(res)    # ['n', 'n', 'n']

'''
findall针对分组的正则表达式匹配到的结果优先显示
可以用 (?:)取消优先显示'''

res = re.findall('a(?:n)d','aandbandcandabc')
print(res)    # ['and', 'and', 'and']

2.取别名操作

import re

res = re.search('a(?P<id>b)(?P<name>c)','abcabcabcabc')
print(res.group())    # abc
print(res.group(1))    # b
print(res.group('id'))    # b
print(res.group('name'))    # c

2.第三方模块的简介

1.第三方模块的用处

        Python之所以能从这么多编写语言中脱引而出的优点就是它有众多的第三方库函数,可以更高效率的实现开发

2.怎么使用

\bullet 第三方模块必须先下载才可以使用

格式: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/

\bullet 可在终端中借助pip工具下载

格式:pip install 模块名

\bullet 在pycharm中也可以直接下载

3.下载第三方模块的注意点

1)pip版本过低这时候就要先更新pip

        python -m pip install --upgrade pip

 2)当更新完pip版本后依然报错这可能是网络波动过大造成

        我们可以从默认的国外的源地址换成国内的源,具体网址看上面的源地址

 3)有些模块在使用前得提前配置一个指定的环境

        可以用Anaconda配置虚拟环境等等等等(未完待续.......)

4.补充知识点

        版本的区分:当用户电脑里有多个解释器的时候需要指定哪个版本的解释器下载需要的模块;当然模块也是在更新迭代的所以模块也是有版本区分所以用户在根据需求下载对应的版本号。

格式:pip解释器版本号 install 模块名 == 版本号

3.网络爬虫基础实战

1.基本步骤详情:

        # 需要用到requests、rs模块 

        # 获取需要爬取网页的请求头

        # 通过requests模块获取网页源码的bytes类型

        # 再给获取的数据进行转码

        # 将读取到的数据写入文件保存

        # 然后通过re正则表达式可以取出需要的具体对应数据

2.代码实现:

        爬取红牛官网并进行适当好看的格式化打印:

import requests
import re


headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
res = requests.get('http://www.redbull.com.cn/about/branch',headers=headers)
res.encoding='utf-8'  # 可以直接用utf-8对数据进行转码
with open(r'hn.html','wb') as f:
     f.write(res.content)
# 1.获取所有的分公司名称
company_name_list = re.findall('<h2>(.*?)</h2>', data)
# 2.获取所有的分公司地址
company_addr_list = re.findall("<p class='mapIco'>(.*?)</p>", data)
# 3.获取所有的分公司邮箱
company_email_list = re.findall("<p class='mailIco'>(.*?)</p>", data)
# 4.获取所有的分公司电话
company_phone_list = re.findall("<p class='telIco'>(.*?)</p>", data)
# 5.将上述四个列表中的数据按照位置整合
res = zip(company_name_list, company_addr_list, company_email_list, company_phone_list)
# 6.处理数据(展示 保存 excel)
for i in res:
    print("""
    ----------------------------公司名称:%s----------------------------
    公司地址:%s
    公司邮箱:%s
    公司电话:%s
    -----------------------------------------------------------------------------
    """ % i)

打印结果:

3.注意点⚠️:

        1.要有职业道德不能让自己的技术干一些刑不刑的事情,很多东西是涉及⚠️⚠️⚠️要判断自己的行为。

        2.很多网站都有专业的反爬机制可以通过请求头来伪装浏览器访问,当然一些大型逼格高的网站可能反爬机制非常完善要爬取有一点难度。

        3.请求头每太设备都有一个对应的不会改变如果需要经常爬取网页的可以拷贝一份存放方便使用,请求头的获取方式:(点击Network后需要 command+R刷新一下)

4.openpyxl模块

1.openpyxl模块的作用

        主要用于操作excel表格,实现自动化办公的其中一个重要知识点。

2.具体使用举例

创建表:

from openpyxl import Workbook  # 导入模块


user_excel = Workbook()  # 创建excel文件
grades = user_excel.create_sheet('成绩表') # 创建成绩表
physique = user_excel.create_sheet('体质表') # 创建体质表
name = user_excel.create_sheet('姓名表', 0)# 创建姓名表并设置成表1
physique.title = '体能表'  # 把体质表改成体能表
name.sheet_properties.tabColor = "8B0000"  # 修改姓名表名字颜色
user_excel.save(r'user_excel.xlsx')  # 保存文件

结果图:

写入内容:

# 第一种写入方式
name['A1'] = '小明同学'
name['B1'] = '男'
# 第二种写入方式
name.cell(row=1, column=3, value='28')
name.cell(row=1, column=4, value='小菜鸡')
# 第三种写入方式(批量写入)
name.append(['小红同学', '女', '18', '貌美如花'])
name.append(['小天同学','男', '20', '一拳一头牛'])
name.append(['小萎同学', '男', 18, '少看小网站'])
name.append(['小张同学',None, 18, ''])

结果图:

3.拓展小知识

excel版本区别:

        03版本之前excel文件后缀名为:.xls

        03版本之后excel文件后缀名为:.xlsx 

        (mac版excel后缀有所不同:.csv)

操作excel模块:

        xlwt、xlrd也可以操作excel表格并且兼容excel的所以版本,在python中有很多模块可以操作excel表格;之所以现在openpyxl比较流行关键原因是比前两者使用方式简单很多。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值