网络爬虫快速入门(二)

本文介绍了Python进行数据解析的基本原理和编码流程,包括爬取网页图片和运用正则表达式提取信息。详细讲解了正则表达式的各种语法,如点、星号、加号、花括号等,并提供了在线检查工具和实例,展示了如何在Python中使用正则表达式切割字符串和进行匹配替换。
摘要由CSDN通过智能技术生成

目录

一、数据解析

1.3原理​编辑

 1.4编码流程

二、图片数据爬取

 三、正则表达式

3.1一般形式:又臭又长

3.2在线检查网站  https://regex101.com/ 

3.2.0普通字符:直接匹配·

3.2.1点-匹配所有字符                表示要匹配除了换行符之外的任何[单个字符。

3.2.2星号.重复匹配任意次*表示匹配前面的子表达式任意次,包括0次。 

3.2.3加号.重复匹配多次+表示匹配前面的子表达式-次或多次,不包括0次。

3.2.4花括号~匹配指定次数花括号表示前面的字符匹配指定的次数

3.2.5贪婪模式与非贪婪模式

3.2.6反斜杠N在正则表达式中有多种用途。转义

3.2.7方括号-匹配某几种类型方括号表示要匹配某几种类型的字符。​编辑

3.2.8正则表达式可以设定[单行模式和多行模式}如果是单行模式,表示匹配整个文本的开头位置。如果是多行模式,表示匹配文本每行的开头位置。

3.2.9括号-组选择括号称之为正则表达式的组选择。是从正则表达式 匹配的内容里面扣取出其中的某些部分

 3.2.10使用正则表达式切割字符串

3.2.11指定替换函数

​编辑 四、正则解析案例


一、数据解析

1.1聚焦爬虫:爬取页面中指定的页面内容

1.2数据解析分类: 正则   bs4   xpath

1.3原理

 1.4编码流程

指定urL
发起请求
获取响应数据
数据解析
持久化存储

二、图片数据爬取

import requests
url = "https://image.baidu.com/search/albumsdetail?tn=albumsdetail&word=%E5%9F%8E%E5%B8%82%E5%BB%BA%E7%AD%91%E6%91%84%E5%BD%B1%E4%B8%93%E9%A2%98&fr=searchindex_album%20&album_tab=%E5%BB%BA%E7%AD%91&album_id=7&rn=30"
imgdata = requests.get(url=url).content
with open('./12.jpg','wb') as fp:
    fp.write(imgdata)

 三、正则表达式

3.1一般形式:又臭又长

content = '''Python3高级开发工程师上海互教教育科技有 限公司.上海-浦东新区 2万/月02-18满员
测试开发工程师(C++/python)上海 墨鹛数码科技有限公司上海-浦东新区 2.5万/每月02- 18未满员
Python3开发工程师上海德拓信 息技术股份有限公司上海-徐汇区 1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区 1.1万/每月02-18剩余5人
Python高级开发工程师上海行动教育科技 股份有限公司上海-闵行区 2.8万1月02-18剩余255人
python开发工程师上海优似腾软件开发有 限公司上海-浦东新区 2.5万/每月02-18满员'''
#将文本内容按行放入列表
lines = content.splitlines()
for line in lines:
    #查找.万/月’在字符串中什么地方
    pos2 = line.find('万/月')
    if pos2 < 0:
        #查找*万/每月在字符串中什么地方
        pos2 = line.find('万/每月')
        #都找不到
        if pos2 < 0:
            continue
    #执行到这里,说明可以找到薪资关键字
    #接下来分析薪资数字的起始位置
    #方法是找到pos2前面薪资数字开始的位置
    idx = pos2-1

    #只要是数字或者小数点,就继续往前面找
    while line[idx].isdigit() or line[idx]=='.':
        idx -= 1
    #现在idx指向薪资数字前面的那个字,
    #所以薪资开始的索引就是idx+1 
    pos1=idx+1
    print(line[pos1:pos2])

正则表达形式:

content = '''Python3高级开发工程师上海互教教育科技有 限公司.上海-浦东新区 2万/月02-18满员
测试开发工程师(C++/python)上海 墨鹛数码科技有限公司上海-浦东新区 2.5万/每月02- 18未满员
Python3开发工程师上海德拓信 息技术股份有限公司上海-徐汇区 1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区 1.1万/每月02-18剩余5人
Python高级开发工程师上海行动教育科技 股份有限公司上海-闵行区 2.8万1月02-18剩余255人
python开发工程师上海优似腾软件开发有 限公司上海-浦东新区 2.5万/每月02-18满员'''
import re
p = re.compile(r'([\d.]+)万/每{0,1}月')
for one in p.findall( content):
    print(one)

3.2在线检查网站  https://regex101.com/ 

 3.2常见语法

3.2.0普通字符:直接匹配·

元字符:它们出现在正则表达式字符串中,不是表示直接匹配他们,而是表达一 些特别的含义。
这些特殊的元字符包括下面这些:
  .  *  +  ?  \  [  ]  ^  $  {  }  |  (  )

3.2.1点-匹配所有字符
                表示要匹配除了换行符之外的任何[单个字符。

content = '''Python3高级开发工程师上海互教教育科技有限公司.上海-浦东新区 2万/月02-18满员
测试开发工程师(C++/python)上海 墨鹛数码科技有限公司上海-浦东新区 2.5万/每月02- 18未满员
Python3开发工程师上海德拓信息技术股份有限公司上海-徐汇区 1.3万/每月02-18剩余11人
测试开发工程师(Python)赫里普(上海)信息科技有限公司上海-浦东新区 1.1万/每月02-18剩余5人
Python高级开发工程师上海行动教育科技股份有限公司上海-闵行区 2.8万1月02-18剩余255人
python开发工程师上海优似腾软件开发有限公司上海-浦东新区 2.5万/每月02-18满员'''
import re
p = re.compile(r'........公司')
for one in p.findall( content):
    print(one)

3.2.2星号.重复匹配任意次
*表示匹配前面的子表达式任意次,包括0次。 

content = '''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的'''
import re
p = re.compile(r',.*')
for one in p.findall( content):
    print(one)

 ●紧跟在.后面,表示任意字符可以出现任意次,所以整个表达式的意思就是在逗号后面
的所有字符,包括逗号

3.2.3加号.重复匹配多次
+表示匹配前面的子表达式-次或多次,不包括0次。

3.2.4花括号~匹配指定次数
花括号表示前面的字符匹配指定的次数

特殊/d{  }表示数字出现 

3.2.5贪婪模式与非贪婪模式

贪婪模式:*  +  ? 都是贪婪的,会尽可能多匹配

 非贪婪模式:r'.*?'

3.2.6反斜杠N在正则表达式中有多种用途。
转义

反斜杠后面接一些字符, 表示匹配某种种类型的一个字符

3.2.7方括号-匹配某几种类型
方括号表示要匹配某几种类型的字符。

注意:1.一些元字符在方括号内失去了魔法,变得和普通字符一样了,例如 . 

          2.如果在方括号中使用^表示非方括号里面的字符集合。

3.2.8正则表达式可以设定[单行模式和多行模式}
如果是单行模式,表示匹配整个文本的开头位置。
如果是多行模式,表示匹配文本每行的开头位置。

^表示匹配文本的开始位置

第二参数:re.S单行模式匹配

                 re.M多行模式

                re.A Ascii

$表示匹配文本的结束位置。 

3.2.9括号-组选择
括号称之为正则表达式的组选择。是从正则表达式 匹配的内容里面扣取出其中的某些部分

content = '''苹果,是绿色色色的
橙子,是橙色的
香蕉,是绿色的
乌鸦,是绿'''
import re
p = re.compile(r'^(.*),',re.M)
for one in p.findall(content):
    print(one)

 3.2.10使用正则表达式切割字符串

import re
names = '关羽;张飞,赵云,马超,黄忠    李逵'
namelist = re.split(r'[;,\s]\s*', names)
print (namelist)

3.2.11指定替换函数

 四、正则解析案例

 

 

分页

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟雨平生9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值