import rehtml
findall() 煩的奧python
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() 賣吃url
#4. match() 查找 ret = re.match('a','abc')#從頭開始找.給正則加^ print(ret.group())
相關操做 spa
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<名>正則 給正則取名字,想把什麼摳出來,就用這個取名 code
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'))
?: 去掉分組htm
#分組 ret = re.findall('www.(baidu|oldboy).com','www.oldboy.com') #去掉分組 ret1 = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
爬蟲blog
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 + "\n") 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)