欢迎观看、欢迎指正、共同学习
爬虫
import requests
response = requests.get("httpS://baijiahao.baidu.com")
print(reponse)
print('---------------')
print(reponse.text)
print('---------------')
print(reponse.content)
print('---------------')
print(reponse.content.decode())
正则表达式
re模块
三步:
1、导包
2、使用match方法进行匹配操作
3、如果数据匹配成功,使用group方法来提取数据
三种匹配操作:
1、使用match进行匹配----result.group()
注意:match只能从开头匹配
2、使用search进行匹配----result.group()
注意:search可以全文查找,但是只能返回匹配的第一个
3、使用findall进行匹配----返回列表
注意:findall可以全文搜索,并且可以返回所有匹配成功的结果
正则表达式匹配单个字符
.:匹配任意1个字符,除了\n换行符
[]:匹配括号中的任意一个字符
\d:匹配任意数字
\D:匹配任意非数字
\w:匹配任意字母数字下划线
\W:匹配任意特殊字符
\s:匹配任意空白字符 空格 \t制表符 \n换行符
\S:匹配任意非空白字符
正则表达式匹配多个字符
*:匹配前一个字符出现0次或者多次----次数>=0(没有内容也可以匹配)
+:匹配前一个字符出现1次或者多次----次数>=1(必须要有内容)
?:匹配前一个字符出现0次或者1次----次数=0 或者 次数=1
{x}:匹配前一个字符出现x次----次数=x
{x,y}:匹配前一个字符出现x到y次----次数>=x 或者 次数<=y
正则表达式匹配开头和结尾
^:匹配以什么开头
$:匹配以什么结尾
注意:两个经常一起配合来限定中间内容个数,多了就报错
正则表达式提取分组内容
(xy):把括号中的x和y作为一个整体分组
(x|y):把括号中的x或者y作为一个分组
\组号 :注意:每个()分组后自动产生一个从1开始的编号,\编号就能获取到对应分组内容
注意:\本身有特殊含义,所以要多加一个转移符号
注意:分组情况下match匹配成功,也是返回所有内容
注意:
1、1个分组情况下findall自动把本次匹配成功的内容放到列表中返回
2、多个分组情况下findall自动把本次匹配成功的多个元组内容封装成元组再放到列表中返回
补充
贪婪模式:.匹配成功的前提下,尽可能多的匹配----.*和.+
非贪婪模式:匹配成功的前提下,尽可能少的匹配----.*?和.+?
re.I忽略大小写
re.S匹配换行符
迭代器和生成器
迭代器
定义:用于在数据集合中逐个访问元素
实现了 __iter__() 和 __next__() 方法的对象,使得可以逐步遍历它的元素
特点:
1、需要显式地实现 __iter__() 和 __next__() 方法。
2、迭代器需要自己管理迭代的状态,包括当前位置和结束条件。
3、内存使用取决于迭代器的实现,通常是惰性计算(即按需生成数据。
注意: 迭代器是惰性的, 只有在需要时才计算, 因此可以无限迭代下去
注意: 用next获取下一个值有弊端容易越界报错
class my_range:
def __init__(self, start, end, step=1):
self.current = start
self.end = end
self.step = step
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
else:
value = self.current
self.current += self.step
return value
r = my_range(1, 5)
print(next(r))
print(next(r))
print(next(r))
print(next(r))
print("-----------------------------------------------")
for i in my_range(1, 5):
print(i)
print("-----------------------------------------------")
for i in range(1, 5):
print(i)
生成器
定义:程序员制定的规则循环生成数据,当条件不成立时则生成数据结束。
作用:可节约大量的内存
创建生成器的方式:
1、生成器推导式
2、yield关键字
yield关键字作用
1、将yield后面的值返回
2、在yield中阻塞
from collections.abc import Iterator
def get_num():
print('生成1')
yield 1
print('生成2')
yield 2
print('生成3')
yield 3
gen = get_num()
print(isinstance(gen, Iterator))
print('-----------------')
print(next(gen))
print(next(gen))
print(next(gen))
print('-----------------')
for i in gen:
print(i)