)(検索※:search()メソッドの両方のモジュールレベル、(直接呼び出しre.searchである)を達成するために、その後、コンパイルされた正規表現パターンも()メソッドを検索しているオブジェクト、それらの間の違いがありますそれは?確かではない以上のパラメータとの差よりも
1、モジュールレベルの検索()メソッド:re.search(パターン、文字列、フラグ= 0)
(私たちは授業で話すように、それはパラメータのフラグがあり、フラグパラメータを引数に注意してください。コンパイラフラグは、モジュールレベルとして、それはそれでそのフラグを指示するためにここでそれをコピーすることはできません)。
※パターン:正規表現パターン
※文字列:検索する文字列
のフラグ※:コンパイラフラグ
2、検索スキーマがコンパイルされたオブジェクト()メソッド:regex.search(文字列[、POS [、endposの]])
(オブジェクト・モデルの前のパラメータパターンを参照してください、彼は正規表現があるので、あなたは、必要ありません。ターゲットパターンの翻訳。
次いで、最初のパラメータが検索される文字列であり、我々のモジュールレベルの探索の2つのオプションのパラメータが続く()メソッドを検索する開始位置(POS)を表す、ないとなどの終了位置(endposの、:
rx.search(文字列、0、50)またはrx.search(文字列[50]、 0)
検索()メソッドがある代わりに、一度に必要な文字列を返しません。 )以下:それは一致するオブジェクトを返すことです
:※マッチングオブジェクトはいくつかの方法であり、あなたはこれらのメソッドを使用し、あなたが必要と一致する文字列得ることが可能である
※グループ()メソッドを:
(値に注目している、正規表現ならばサブセット、サブセットのコンテンツマッチングがこのグループ()メソッドのセットの数であり捕捉される、請求取り込まれたサブセットに対応する文字列を抽出してもよい。:)例えば
※開始()メソッド:それはマッチング返した開始位置
※端()メソッドは:そのマッチングの終了位置を返し
※スパン()メソッドを:それは一致した範囲を返します
※のfindAll()メソッド:すべてのコンテンツマッチングを見つけ、その後、リターンのリストにそれらを整理する
正規表現は、サブグループが含まれている場合は、正規表現のサブグループの場合には行われていない何かです(、そう、のfindAll()は非常にスマートになります。)
例を挙げると、それは登る姿を掲載:たとえば、私たちは、このページのダウンロードしたい
顔にすべての画像を:http://tieba.baidu.com/p/5252578245
あるいは、最初の場所をチェックアウト:我々が見る、絵は、開始タグのIMGで、その後のスペースという、画像のアドレスを取得SRC
まずテストを絵に対処しようと降りる、とします:
import urllib.request
import re
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400')
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
return html
def get_img(html):
#爬取图片的正则表达式
p = r'<img class="BDE_Image" src="[^"]+\.jpg"'
imglist = re.findall(p,html)
for each in imglist:
print(each)
if __name__ == '__main__':
url = "http://tieba.baidu.com/p/5252578245"
get_img(open_url(url))
:次のようにテスト結果を印刷
開いていないあなただけのブラウザをダウンロードするには上記のアドレスをコピーするので、解決すべき次の問題は、裏返しにこれらのアドレスを抽出する方法である、我々はそれが我々が写真へのアクセス権を持つことができるということです対処する必要があり、変更次のような方法は、非常に簡単です
p = r'<img class="BDE_Image" src="[^"]+\.jpg"' 改为 p = r'<img class="BDE_Image" src="([^"]+\.jpg)"',
完全なコード:完了するまで実行は、あなたがソースファイルをダウンロードする写真の位置になります
import urllib.request
import re
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400')
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
return html
def get_img(html):
#爬取图片的正则表达式
p = r'<img class="BDE_Image" src="([^"]+\.jpg)"'
imglist = re.findall(p,html)
'''
for each in imglist:
print(each)
'''
for each in imglist:
filename = each.split("/")[-1] #因为图片的路径都是/隔开的,取最后一个就是文件名
#用urlretrieve()这个方法来获得他的内容,自动下载他的地址
urllib.request.urlretrieve(each,filename,None)
if __name__ == '__main__':
url = "http://tieba.baidu.com/p/5252578245"
get_img(open_url(url))
なぜ小さなブラケットはやることが簡単だろうに追加しますか?findAll()メソッド、与えられた単語は、サブグループを構成する場合には正の表現は、それがグループのコンテンツを処理するためです個別に返すために戻って。サブグループが複数存在する場合は、それはタプルの背面に結合された形態の内容と一致します。
別として、国内の自由HTTPプロキシIPの例自動的にIPアドレスを取得
import urllib.request
import re
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400')
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
return html
def get_img(html):
#IP地址的正则表达式
p = r'(([0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}([0,1]?\d?\d|2[0-4]\d|25[0-5])'
iplist = re.findall(p,html)
for each in iplist:
print(each)
if __name__ == '__main__':
url = "https://www.xicidaili.com/wt/"
get_img(open_url(url))
結果は:
私たちは正規表現の内部に三つのサブグループを使用しているため(あなたは、我々は非常になぜそれが、これは明らかに私たちが望む結果ではないようで、混乱している見ることができるので、findAllの()の助けにスマートにしようとしますか?我々の結果は、分類を行い、その後、タプルの形で私たちに戻りました。)
この問題を解決するために、我々は、サブグループのキャプチャコンテンツを任せることはできません。その後、サブグループは、それが拡張構文は、非キャプチャグループであることコンテンツをキャプチャしません聞かせて、文法を拡張するために使用することができます(?:...)、だけにして、正規表現構文拡張として表現小さなカッコ後者の場合には、疑問符ので?? 彼は一度かない彼のものの前に近い試合で、左小括弧がある場合、あなたは追加しますか?括弧はメタ文字であるため、疑問符は、意味がありません。
import urllib.request
import re
def open_url(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400')
response = urllib.request.urlopen(req)
html = response.read().decode("utf-8")
return html
def get_img(html):
#IP地址的正则表达式
p = r'(?:(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])\.){3}(?:[0,1]?\d?\d|2[0-4]\d|25[0-5])'
iplist = re.findall(p,html)
for each in iplist:
print(each)
if __name__ == '__main__':
url = "https://www.xicidaili.com/wt/"
get_img(open_url(url))
※finditer()メソッド:結果は、データへのアクセスを容易にするために、反復的に、イテレータ戻ります。
※サブ()メソッド:置換操作が達成されます。
次のようにいくつかの特別な構文はあります。また行くことができるのpython3正規表現を、特別なシンボルの使用(詳細なリスト)続きを読みます