最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲(chóng)之正則表達(dá)式的使用教程詳解

 更新時(shí)間:2018年10月25日 10:44:00   作者:-零  
本文實(shí)例代碼相結(jié)合給大家詳細(xì)介紹了Python爬蟲(chóng)之正則表達(dá)式的使用,包括參數(shù)介紹,最常規(guī)的匹配,匹配目標(biāo),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

正則表達(dá)式的使用

re.match(pattern,string,flags=0)

re.match嘗試從字符串的起始位置匹配一個(gè)模式,如果不是起始位置匹配成功的話,match()就返回none

參數(shù)介紹:

pattern:正則表達(dá)式

string:匹配的目標(biāo)字符串

flags:匹配模式

正則表達(dá)式的匹配模式:


最常規(guī)的匹配

import re
content ='hello 123456 World_This is a Regex Demo'
print(len(content))
result = re.match('^hello\s\d{6}\s\w{10}.*Demo$$',content)
print(result)
print(result.group()) #返回匹配結(jié)果
print(result.span()) #返回匹配結(jié)果的范圍

結(jié)果運(yùn)行如下:

39
<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
hello 123456 World_This is a Regex Demo
(0, 39)

泛匹配

使用(.*)匹配更多內(nèi)容

import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^hello.*Demo$',content)
print(result)
print(result.group())

結(jié)果運(yùn)行如下:

<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
hello 123456 World_This is a Regex Demo

匹配目標(biāo)

在正則表達(dá)式中使用()將要獲取的內(nèi)容括起來(lái)

使用group(1)獲取第一處,group(2)獲取第二處,如此可以提取我們想要獲取的內(nèi)容

import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^hello\s(\d{6})\s.*Demo$',content)
print(result)
print(result.group(1))#獲取匹配目標(biāo)

結(jié)果運(yùn)行如下:

<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
123456

貪婪匹配

import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^he.*(\d+).*Demo$',content)
print(result)
print(result.group(1))

注意:.*會(huì)盡可能的多匹配字符

非貪婪匹配

import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('^he.*?(\d+).*Demo$',content)
print(result)
print(result.group(1)) 

注意:.*?會(huì)盡可能匹配少的字符

使用匹配模式

在解析HTML代碼時(shí)會(huì)有換行,這時(shí)我們就要使用re.S

import re
content ='hello 123456 World_This ' \
'is a Regex Demo'
result = re.match('^he.*?(\d+).*?Demo$',content,re.S)
print(result)
print(result.group(1))

運(yùn)行結(jié)果如下:

<_sre.SRE_Match object; span=(0, 39), match='hello 123456 World_This is a Regex Demo'>
123456

轉(zhuǎn)義

在解析過(guò)程中遇到特殊字符,就需要做轉(zhuǎn)義,比如下面的$符號(hào)。

import re
content = 'price is $5.00'
result = re.match('^price.*\$5\.00',content)
print(result.group())

總結(jié):盡量使用泛匹配,使用括號(hào)得到匹配目標(biāo),盡量使用非貪婪模式,有換行就用re.S

re.search(pattern,string,flags=0)

re.search掃描整個(gè)字符串并返回第一個(gè)成功的匹配。

比如我想要提取字符串中的123456,使用match方法無(wú)法提取,只能使用search方法。

import re
content ='hello 123456 World_This is a Regex Demo'
result = re.match('\d{6}',content)
print(result)
import re
content ='hello 123456 World_This is a Regex Demo'
result = re.search('\d{6}',content)
print(result)
print(result.group())

運(yùn)行結(jié)果如下:

<_sre.SRE_Match object; span=(6, 12), match='123456'>

匹配演練

可以匹配代碼里結(jié)構(gòu)相同的部分,這樣可以返回你需要的內(nèi)容

import re
content = '<a title="2009年中信出版社出版圖書(shū)" href="/doc/2703035-2853985.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853985" data-cid="sense-list">2009年中信出版社出版圖書(shū)</a>'
result = re.search('<a.*?new:\d{7}-\d{7}.*?>(.*?)</a>',content)
print(result.group(1))
2009年中信出版社出版圖書(shū)
re.findall(pattern,string,flags=0)

搜索字符串,以列表形式返回全部能匹配的字串

import re
html ='''
<li>
<a title="網(wǎng)絡(luò)歌曲" href="/doc/2703035-2853927.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853927" data-cid="sense-list">網(wǎng)絡(luò)歌曲</a>
</li>
<li>
<a title="2009年中信出版社出版圖書(shū)" href="/doc/2703035-2853985.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853985" data-cid="sense-list">2009年中信出版社出版圖書(shū)</a>
</li>
'''
result = re.findall('<a.*?new:\d{7}-\d{7}.*?>(.*?)</a>',html,re.S)
count = 0
for list in result:
  print(result[count])
  count+=1
網(wǎng)絡(luò)歌曲
2009年中信出版社出版圖書(shū)
re.sub( pattern,repl,string,count,flags)

re.sub共有五個(gè)參數(shù)

三個(gè)必選參數(shù) pattern,repl,string

兩個(gè)可選參數(shù)count,flags

替換字符串中每一個(gè)匹配的字符串后替換后的字符串

import re
content = 'hello 123456 World_This is a Regex Demo'
content = re.sub('\d+','',content)
print(content)

運(yùn)行結(jié)果如下:

hello  World_This is a Regex Demo
import re
content = 'hello 123456 World_This is a Regex Demo'
content = re.sub('\d+','what',content)
print(content)

運(yùn)行結(jié)果如下:

hello what World_This is a Regex Demo
import re
content = 'hello 123456 World_This is a Regex Demo'
content = re.sub('(\d+)',r'\1 789',content)
print(content)

運(yùn)行結(jié)果如下:

hello 123456 789 World_This is a Regex Demo

注意:這里\1代表前面匹配的123456

演練

在這里我們替換li標(biāo)簽

import re
html ='''
<li>
<a title="網(wǎng)絡(luò)歌曲" href="/doc/2703035-2853927.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853927" data-cid="sense-list">網(wǎng)絡(luò)歌曲</a>
</li>
<li>
<a title="2009年中信出版社出版圖書(shū)" href="/doc/2703035-2853985.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853985" data-cid="sense-list">2009年中信出版社出版圖書(shū)</a>
</li>
'''
html = re.sub('<li>|</li>','',html)
print(html)

運(yùn)行結(jié)果如下,里面就沒(méi)有l(wèi)i標(biāo)簽

<a title="網(wǎng)絡(luò)歌曲" href="/doc/2703035-2853927.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853927" data-cid="sense-list">網(wǎng)絡(luò)歌曲</a>
<a title="2009年中信出版社出版圖書(shū)" href="/doc/2703035-2853985.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" target="_blank" data-log="old:2703035-2853885,new:2703035-2853985" data-cid="sense-list">2009年中信出版社出版圖書(shū)</a>
compile(pattern [, flags])

該函數(shù)根據(jù)包含的正則表達(dá)式的字符串創(chuàng)建模式對(duì)象??梢詫?shí)現(xiàn)更有效率的匹配

將正則表達(dá)式編譯成正則表達(dá)式對(duì)象,以便于復(fù)用該匹配模式

import re
content = 'hello 123456 ' \
'World_This is a Regex Demo'
pattern = re.compile('hello.*?Demo',re.S)
result = re.match(pattern,content)
print(result.group()) 

運(yùn)行結(jié)果如下:

hello 123456 World_This is a Regex Demo

綜合使用

import re
html = '''
<div class="slide-page" style="width: 700px;" data-index="1">
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="26725678">
        <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2525020357.jpg" alt="解除好友2:暗網(wǎng)" data-x="694" data-y="1000">
      </div>
      <p>
        解除好友2:暗網(wǎng)
          <strong>7.9</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="26916229">
        <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2532008868.jpg" alt="鐮倉(cāng)物語(yǔ)" data-x="2143" data-y="2993">
      </div>
      <p>
        鐮倉(cāng)物語(yǔ)
          <strong>6.9</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="26683421">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2528281606.jpg" alt="特工" data-x="690" data-y="986">
      </div>
      <p>
        特工
          <strong>8.3</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="27072795">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2521583093.jpg" alt="幸福的拉扎羅" data-x="640" data-y="914">
      </div>
      <p>
        幸福的拉扎羅
          <strong>8.6</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="27201353">
        <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2528842218.jpg" alt="大師兄" data-x="679" data-y="950">
      </div>
      <p>
        大師兄
          <strong>5.2</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="30146756">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530872223.jpg" alt="風(fēng)語(yǔ)咒" data-x="1079" data-y="1685">
      </div>
      <p>
        風(fēng)語(yǔ)咒
          <strong>6.9</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="26630714">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2530591543.jpg" alt="精靈旅社3:瘋狂假期" data-x="1063" data-y="1488">
      </div>
      <p>
        精靈旅社3:瘋狂假期
          <strong>6.8</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="25882296">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2526405034.jpg" alt="狄仁杰之四大天王" data-x="2500" data-y="3500">
      </div>
      <p>
        狄仁杰之四大天王
          <strong>6.2</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="26804147">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2527484082.jpg" alt="摩天營(yíng)救" data-x="1371" data-y="1920">
      </div>
      <p>
        摩天營(yíng)救
          <strong>6.4</strong>
      </p>
    </a>
    <a class="item" target="_blank" >
      <div class="cover-wp" data-isnew="false" data-id="24773958">
        <img src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2517753454.jpg" alt="復(fù)仇者聯(lián)盟3:無(wú)限戰(zhàn)爭(zhēng)" data-x="1968" data-y="2756">
      </div>
      <p>
        復(fù)仇者聯(lián)盟3:無(wú)限戰(zhàn)爭(zhēng)
          <strong>8.1</strong>
      </p>
    </a>
  </div>
'''
count = 0
for list in result:
  print(result[count])
  count+=1

運(yùn)行結(jié)果如下:

('解除好友2:暗網(wǎng)', '7.9')
('鐮倉(cāng)物語(yǔ)', '6.9')
('特工', '8.3')
('幸福的拉扎羅', '8.6')
('大師兄', '5.2')
('風(fēng)語(yǔ)咒', '6.9')
('精靈旅社3:瘋狂假期', '6.8')
('狄仁杰之四大天王', '6.2')
('摩天營(yíng)救', '6.4')
('復(fù)仇者聯(lián)盟3:無(wú)限戰(zhàn)爭(zhēng)', '8.1')

總結(jié)

以上所述是小編給大家介紹的Python爬蟲(chóng)之正則表達(dá)式的使用教程,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 用python實(shí)現(xiàn)對(duì)比兩張圖片的不同

    用python實(shí)現(xiàn)對(duì)比兩張圖片的不同

    這篇文章主要介紹了用python實(shí)現(xiàn)對(duì)比兩張圖片的不同的相關(guān)資料,需要的朋友可以參考下
    2018-02-02
  • python使用SMTP發(fā)送qq或sina郵件

    python使用SMTP發(fā)送qq或sina郵件

    這篇文章主要為大家詳細(xì)介紹了python使用SMTP發(fā)送qq或sina郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Python中判斷輸入是否為數(shù)字的實(shí)現(xiàn)代碼

    Python中判斷輸入是否為數(shù)字的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python中判斷輸入是否為數(shù)字的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2018-05-05
  • python3 反射的四種基本方法解析

    python3 反射的四種基本方法解析

    這篇文章主要介紹了python3 反射的四種基本方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Python 讀取指定文件夾下的所有圖像方法

    Python 讀取指定文件夾下的所有圖像方法

    下面小編就為大家分享一篇Python 讀取指定文件夾下的所有圖像方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • PyTorch 如何設(shè)置隨機(jī)數(shù)種子使結(jié)果可復(fù)現(xiàn)

    PyTorch 如何設(shè)置隨機(jī)數(shù)種子使結(jié)果可復(fù)現(xiàn)

    這篇文章主要介紹了PyTorch 設(shè)置隨機(jī)數(shù)種子使結(jié)果可復(fù)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Python matplotlib圖例放在外側(cè)保存時(shí)顯示不完整問(wèn)題解決

    Python matplotlib圖例放在外側(cè)保存時(shí)顯示不完整問(wèn)題解決

    這篇文章主要介紹了Python matplotlib圖例放在外側(cè)保存時(shí)顯示不完整問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python線程指南詳細(xì)介紹

    Python線程指南詳細(xì)介紹

    本文介紹了Python對(duì)于線程的支持,包括學(xué)會(huì)多線程編程需要掌握的基礎(chǔ)以及Python兩個(gè)線程標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例
    2017-01-01
  • Python中22個(gè)萬(wàn)用公式的小結(jié)

    Python中22個(gè)萬(wàn)用公式的小結(jié)

    在大家的日常python程序的編寫(xiě)過(guò)程中,都會(huì)有自己解決某個(gè)問(wèn)題的解決辦法,或者是在程序的調(diào)試過(guò)程中,用來(lái)幫助調(diào)試的程序公式,本文總結(jié)了22個(gè)萬(wàn)用公式,感興趣的可以了解一下
    2021-07-07
  • PyTorch中torch.save()的用法和應(yīng)用小結(jié)

    PyTorch中torch.save()的用法和應(yīng)用小結(jié)

    本文主要介紹了PyTorch中torch.save()的用法和應(yīng)用小結(jié),torch.save()的主要作用就是將PyTorch對(duì)象保存到磁盤(pán)上,下面就來(lái)具體介紹一下,感興趣的可以了解一下
    2024-03-03

最新評(píng)論

顺义区| 揭阳市| 乌恰县| 郴州市| 缙云县| 玉门市| 紫金县| 渭南市| 盈江县| 临沭县| 桐庐县| 招远市| 新余市| 金华市| 磐安县| 历史| 吉安市| 河曲县| 柳河县| 句容市| 土默特右旗| 东山县| 信宜市| 昔阳县| 湄潭县| 鹤壁市| 邯郸市| 西平县| 乌鲁木齐县| 崇明县| 达州市| 维西| 齐齐哈尔市| 张家口市| 宜宾县| 伽师县| 开原市| 宜春市| 大渡口区| 府谷县| 井陉县|