python正則表達式【電影天堂爬取】

正則表達式

import re
result = re.match("\w{4,20}@163\.com$","[email protected]")
if result:
    print("match success!")
    print("match content:", result.group())
else:
    print("math fail!")
  • 分組 |

    import re
    result = re.match("^[0-9][0-9]$|^100$","77") #正則表達式匹配0~100之間的數字 |左右任意一個滿足即可匹配
    if result:
        print("match success!")
        print("match content:", result.group())
    else:
        print("math fail!")
    
  • 整體()

    (abc)將括號中的字符作爲一個整體進行匹配分組

    分組從1開始計數,第一個小括號爲組1

    \w{4,20}@(163|126|qq|sina)\.com$ #匹配各種郵箱
    

    提取區號和電話號碼

    import re
    result = re.match("(\d{3,4})-(\d{7,8})","023-12345678")
    if result:
        print("match success!")
        print("區號:", result.group(1)) #分組
        print("電話號碼:", result.group(2))  # 分組
    else:
        print("math fail!")
    
  • 引用分組 \

    注意轉義字符

    import re
    result = re.match("<([a-zA-Z0-9]+)><([a-zA-Z0-9]+)>.*</\\2></\\1>","<div><h1>this is a string</h1></div>") #引用第一個分組,表示與第一組內容一致 \是轉義字符
    if result:
        print("match success!")
        print("match content:", result.group())
    
    else:
        print("math fail!")
    
  • 分組起別名(?P<name>)

  • 分組引用別名(?P=name)

    import re
    result = re.match("<(?P<name1>[a-zA-Z0-9]+)><(?P<name2>[a-zA-Z0-9]+)>.*</(?P=name2)></(?P=name1)>","<div><h1>this is a string</h1></div>") #引用第一個分組,表示與第一組內容一致 \是轉義字符
    if result:
        print("match success!")
        print("match content:", result.group())
    
    else:
        print("math fail!")
    
  • re.findall()

    返回滿足正則條件的所有內容,是一個列表

    import re
    result = re.findall("\d+","閱讀次數999,轉發次數888,評論次數777") #返回一個列表
    if result:
        print("match success!")
        print("match content:", result)
    else:
        print("math fail!")
    
  • re.search()

    找到第一個匹配即返回 類似find函數

  • re.match()

    從字符串0號位置開始匹配,如果0號位置不滿足即返回失敗 即使從1號位可以匹配也是匹配失敗

  • re.sub()

    用一個新的字符串替換原來內容中滿足正則表達式的內容

    import re
    result = re.sub("\d+","1000","閱讀次數999,轉發次數888,評論次數777") # 把字符串中所有的正則替換爲1000,返回替換後的內容
    if result:
        print("match success!")
        print("match content:", result)
    else:
        print("math fail!")
    
  • re.split()

    分割內容

    import re
    result = re.split(":| ","info:[email protected] tom jerry") 
    if result:
        print("match success!")
        print("match content:", result)
    else:
        print("math fail!")
    

python默認是貪婪匹配,即總是嘗試匹配儘可能多的字符
+ * {} ?後面加?變成非貪婪,即只匹配一次就結束

獲取電影天堂的電影

r.encoding = 'utf-8'
import re
import requests
def get_url(url):
    try:
        kv = {"user-agent":"Mozilla/5.0"}
        r = requests.get(url,headers=kv)
        r.raise_for_status()
        r.encoding = 'gb2312'
        demo = r.text
        links = re.findall("ulink\">(.*?)</a>", demo)
        for link in links:
            print(link)
    except Exception as e:
        print(e)


if __name__ == '__main__':
    head = "https://www.ygdy8.net/"
    url = "https://www.ygdy8.net/html/gndy/dyzz/list_23_2.html"
    get_url(url)
發佈了1154 篇原創文章 · 獲贊 46 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章