1. 程式人生 > 其它 >pyhon爬蟲模擬網頁登陸、正則表示式

pyhon爬蟲模擬網頁登陸、正則表示式

前言:不是每個網頁都能模擬成功,僅供學習

模擬網頁登陸

--安裝模組--
pip install urllib (執行cmd輸入此段程式碼即可安裝)

點選檢視程式碼
from urllib import request
import urllib
from http import cookiejar

# 定義檔名
filename = 'cookie.txt'

# 宣告一個cookie,傳入檔名
cookie = cookiejar.MozillaCookieJar(filename)

# 定義cookie處理
handler = request.HTTPCookieProcessor(cookie)

# 定義下載器,傳入處理器
opener = request.build_opener(handler)

# 定義登入用的賬號密碼

postdata = urllib.parse.urlencode({

    'username': '賬號',
    'password': '密碼'
}).encode(encoding='UTF8')

# url
loginUrl = '網站'

# 模擬登入頁面
resp = opener.open(loginUrl, postdata)

# 儲存cookie到檔案

cookie.save(ignore_discard=True, ignore_expires=True)

# 再次訪問網站
url2 = "網站"

# 開啟頁面
try:
    result = opener.open(url2)
except request.HTTPError as e:
    if hasattr(e, "code"):
        print(e.code)
except request.URLError as e:
    if hasattr(e, "reason"):
        print(e.reason)
else:
    print(result.read())

正則表示式

瞭解正則表示式
正則表示式是對字串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個“規則字串”,這個“規則字串”用來表達對字串的一種過濾邏輯。
安裝模組
pip install re (執行cmd輸入此段程式碼即可安裝)

import re
將正則表示式編譯成Pattern物件,注意hello前面的r的意思是“原生字串”
pattern = re.compile(r'hello')
使用re.match匹配文字,獲得匹配結果,無法匹配時將返回None
result1 = re.match(pattern,'hello')
result2 = re.match(pattern,'helloo YC!')
result3 = re.match(pattern,'helo YC!')
result4 = re.match(pattern,'hello YC!')
match表示從頭開始匹配 匹配不到返回none
search可以從任意位置匹配

認識匹配規則字元:

點選檢視程式碼
import re

# 定義正則化規則=匹配模式,r表示原生字串
rexg = re.compile(r'\d*\w*')
res = re.search(rexg, '555555555ddddddddddddd5')
print(res)

rexg1 = re.compile(r'\d+\w*')
res1 = re.search(rexg1, 'ppppp555555555ddddddddddddd5')
print(res1)

rexg2 = re.compile(r'\d?dddddd')
res2 = re.search(rexg2, 'ppppp555555555ddddddddddddd5')
print(res2)

# 電話號碼
rexg3 = re.compile(r'1\d{10}')
res3 = re.search(rexg3, '13865256323')
print(res3)

# 定義郵箱
rexg4 = re.compile(r'\d{5,12}@\w{2}\.\w{3}')
res4 = re.search(rexg4, '[email protected]')
print(res4)

rexg5 = re.compile(r'\d+')
res5 = re.search(rexg5, '[email protected]')
print(res5)

rexg6 = re.compile(r'\d{5,12}? ?')
res6 = re.search(rexg6, '[email protected]')
print(res6)

# 邊界匹配-匹配字串開頭
rexg7 = re.compile(r'\Aabc')
res7 = re.search(rexg7, 'abcqqqqqqqqqabccttttttttttt'
                        'abcctttttttttabc')
print(res7)

# 任意

rexg8 = re.compile(r'1\d{10}|\d{5,12}@\w{2}\.\w{3}')

res8 = re.search(rexg8, "[email protected]")
print(res8)

# 分組

rexg9 = re.compile(r'(abc){3}')
res9 = re.search(rexg9, "zUJXHUJHXuabcabcabcosaojaodiabcosajosabc")
print(res9)

# 分組 + 別名
rexg10 = re.compile(r'(?P<tt>abc)888(?P=tt)')
res10 = re.search(rexg10, "hasghsabc888abc")
print(res10)

# 分組 + 編號

rexg11 = re.compile(r'(\d{5})uu\1')

res11 = re.search(rexg11, "12345uu12345")
print(res11)