import re
findall() 烦的奥
import re # 1. findall 查找所有结果,数据不是特别庞大 lst = re.findall('a','abcsdfasdfa') print(lst)
finditer() 烦的一特
#2. finditer 找到的结果返回迭代器 it = re.finditer(r'd+','你好啊200,哈哈233') for el in it:#从迭代器中获取到的是分组的信息 print(el.group())#个肉破,获取具体信息
search() 色吃
#3. search() 查找, 如果查找到第一个结果,就停止,如果查不到结果就返回None ret = re.search('e','abc') print(ret)#不要用空去点
match() 卖吃
#4. match() 查找 ret = re.match('a','abc')#从头开始找.给正则加^ print(ret.group())
相关操作
ret = re.split('ab','ab哈哈ab你好哈哈') (d+)带了括号原来的刀还留着
print(ret)#按照正则切,切完了,产生空白
#sub(仨波)替换 第一个参数是替换的东西,第二个替换的结果
ret1 = re.sub('250','__sb__','哈哈250你好啊250,我不好250')
print(ret1)
#shbn(仨波n)替换,加替换了多少次
ret1 = re.subn('250','__sb__','哈哈250你好啊250,我不好250')
print(ret1)
#compile()康派奥!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!作用很大
obj = re.compile(r'd+')#预加载.先把这个正则加载到内存,用的时候不用再加载,写一遍
lst = obj.findall('哈哈222,你好2222')#从内存中拿直接用
print(lst)
?P<名>正则 给正则取名字,想把什么抠出来,就用这个取名
obj = re.compile(r'(?P<id>d+)(?P<zimu>e{3})')#给这个正则起名,取值好取 lst = obj.search('abcsdfjsd123eeelkabc') print(lst.group()) print(lst.group('id')) print(lst.group('zimu'))
?: 去掉分组
#分组 ret = re.findall('www.(baidu|oldboy).com','www.oldboy.com') #去掉分组 ret1 = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
爬虫
rom urllib.request import urlopen #打开一个链接.读取源代码 import ssl ssl._create_default_https_context = ssl._create_unverified_context def getPage(url): response = urlopen(url)#打开,和网页链接 return response.read().decode('utf_8')#返回正常页面源代码 读取源代码 编码 抵扣的 def parsePage(s):#页面源代码 ret = re.findall('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?'+ '<span class="title">(?P<title>.*?)</span>'+ '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>'+ '(?P<comment_num>.*?)评价</span>', s, re.S) return ret #id,title, rating_num, comment_num def main(num): url = 'https://movie.douban.com/top250?start=%s&filter=' % num response_html = getPage(url) # response_html是页面源代码 ret = parsePage(response_html) print(ret) # id,title, rating_num, comment_num s = 0 for i in range(10): #10页 main(s)#分页 第一个0 25 50 75 s += 25
精细版
import ssl import re from urllib.request import urlopen # ⼲干掉数字签名证书 ssl._create_default_https_context = ssl._create_unverified_context def getPage(url): response = urlopen(url) return response.read().decode('utf-8') def parsePage(s): com = re.compile( '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?' + '<span class="title">(?P<title>.*?)</span>'+ '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>'+ '(?P<comment_num>.*?)评价</span>', re.S) ret = com.finditer(s) for i in ret: yield { "id": i.group("id"), "title": i.group("title"), "rating_num": i.group("rating_num"), "comment_num": i.group("comment_num"),} def main(num): url = 'https://movie.douban.com/top250?start=%s&filter=' % num response_html = getPage(url) ret = parsePage(response_html) # print(ret) f = open("move_info7", "a", encoding="utf8") for obj in ret: print(obj) data = str(obj) f.write(data + " ") count = 0 for i in range(10): main(count) count += 25
模块
import 模块名 嗯炮特
1.检查是否已经被导入过,顺序 内存 -> 内置 -> sys.path
2. 如果没有导入过这个模块,先创建一个名称空间
3. 然后把导入的模块执行一遍. 把执行的结果放在刚才的空间中
4. 把模块的名字命名给这个空间
所有被导入的模块都会放在sys.modules字典里
使用模块中的内容. 模块名字.方法/变量/类
__name__:
如果当前模块是程序的入口. __name__的值:__main___
if __name__ == '__main__': # __main__ 程序的入口 print("我在浪挖的测试")
如果模块是被其他模块引入的. __name__是模块名
from xxx import xxx
from 模块 import 模块中的内容
from 模块 import * 不推荐
导入的内容可以直接使用. 不需要模块.xxx. 和当前模块中的变量冲突
as可以起名字
import sys print(sys.modules.keys()) # 查看到已经引入的模块信息 print(sys.path)