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

Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容

 更新時(shí)間:2020年12月08日 14:32:48   作者:鹿鳴Llane  
這篇文章主要給大家介紹了關(guān)于Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

Python爬蟲,除了使用大家廣為使用的scrapy架構(gòu)外,還有很多包能夠?qū)崿F(xiàn)一些簡(jiǎn)單的爬蟲,如BeautifulSoup、Urllib、requests,在使用這些包時(shí),有的網(wǎng)絡(luò)因?yàn)楸容^復(fù)雜,比較難以找到自己想要的代碼,在這個(gè)時(shí)候,如果能夠使用正則表達(dá)式,將能很方便地爬取到自己想要的數(shù)據(jù)。

何為正則表達(dá)式

正則表達(dá)式是一種描述字符串排列的一種語(yǔ)法規(guī)則,通過(guò)該規(guī)則可以在一個(gè)大字符串中匹配出滿足規(guī)則的子字符串。簡(jiǎn)單來(lái)說(shuō),就是給定了一個(gè)字符串,在字符串中找到想要的字符串,如一個(gè)電話號(hào)碼,一個(gè)IP地址,一個(gè)字段,在爬蟲過(guò)程中,如果靈活使用正則表達(dá)式,將極大地提升爬蟲效率。

正則表達(dá)式 描述
^ 匹配字符串的開頭
$ 匹配字符串的末尾。
. 匹配任意字符,除了換行符,當(dāng)re.DOTALL標(biāo)記被指定時(shí),則可以匹配包括換行符的任意字符。
[…] 用來(lái)表示一組字符,單獨(dú)列出:[amk] 匹配 ‘a(chǎn)',‘m'或'k'
[^…] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0個(gè)或多個(gè)的表達(dá)式。
re+ 匹配1個(gè)或多個(gè)的表達(dá)式。
re? 匹配0個(gè)或1個(gè)由前面的正則表達(dá)式定義的片段,非貪婪方式
re{ n}
re{ n,} 精確匹配n個(gè)前面表達(dá)式。
re{ n, m} 匹配 n 到 m 次由前面的正則表達(dá)式定義的片段,貪婪方式
a b
(re) G匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組
(?imx) 正則表達(dá)式包含三種可選標(biāo)志:i, m, 或 x 。只影響括號(hào)中的區(qū)域。
(?-imx) 正則表達(dá)式關(guān)閉 i, m, 或 x 可選標(biāo)志。只影響括號(hào)中的區(qū)域。
(?: re) 類似 (…), 但是不表示一個(gè)組
(?imx: re) 在括號(hào)中使用i, m, 或 x 可選標(biāo)志
(?-imx: re) 在括號(hào)中不使用i, m, 或 x 可選標(biāo)志
(?#…) 注釋.
(?= re) 前向肯定界定符。如果所含正則表達(dá)式,以 … 表示,在當(dāng)前位置成功匹配時(shí)成功,否則失敗。但一旦所含表達(dá)式已經(jīng)嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re) 前向否定界定符。與肯定界定符相反;當(dāng)所含表達(dá)式不能在字符串當(dāng)前位置匹配時(shí)成功
(?> re) 匹配的獨(dú)立模式,省去回溯。
\w 匹配字母數(shù)字
\W 匹配非字母數(shù)字
\s 匹配任意空白字符,等價(jià)于 [\t\n\r\f].
\S 匹配任意非空字符
\d 匹配任意數(shù)字,等價(jià)于 [0-9].
\D 匹配任意非數(shù)字
\A 匹配字符串開始
\Z 匹配字符串結(jié)束,如果是存在換行,只匹配到換行前的結(jié)束字符串。c
\z 匹配字符串結(jié)束
\G 匹配最后匹配完成的位置。
\b 匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如, ‘er\b' 可以匹配"never" 中的 ‘er',但不能匹配 “verb” 中的 ‘er'。
\B 匹配非單詞邊界。‘er\B' 能匹配 “verb” 中的 ‘er',但不能匹配 “never” 中的 ‘er'。
\n, \t, 等. 匹配一個(gè)換行符。匹配一個(gè)制表符。等
\1…\9 匹配第n個(gè)分組的子表達(dá)式。
\10 匹配第n個(gè)分組的子表達(dá)式,如果它經(jīng)匹配。否則指的是八進(jìn)制字符碼的表達(dá)式。

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

re.match

import re
str1='123asdfa'
mathch1 = re.match("^[0-9]",str1)
print(mathch1.group())

結(jié)果

1

如果要匹配12,則

import re
str1='12s3asdfa'
mathch1 = re.findall("1[0-9]",str1)
print(mathch1)

結(jié)果

['12']

修改[0-9]為[10-19]是無(wú)法匹配到的。

因此,該語(yǔ)句將從頭到尾匹配字符,匹配到則結(jié)束,需要.group才能獲取到匹配到的值。

re.search

import re
str1='1a2s3asdfa'
mathch1 = re.search("^[0-9]",str1)
print(mathch1.group())

結(jié)果

1

從頭到尾匹配字符,直到找到一個(gè)匹配,需要.group才能獲取到匹配到的值。re.serach()和re.match()的區(qū)別,re.search()將匹配所有的字符,re.match只匹配字符串的開頭,如果開頭不符合規(guī)則,則返回None。

re.split()

import re
str1='1a2s3asdfa'
mathch1 = re.split("[0-9]",str1)
print(mathch1)

結(jié)果

['', 'a', 's', 'asdfa']

將匹配到的字符作為分隔符分隔字符串。

re.findall()

import re
str1='12s3asdfa'
mathch1 = re.findall("[0-9]",str1)
print(mathch1)

運(yùn)行結(jié)果

['1', '2', '3']

匹配所有符合規(guī)則的字符。

re.sub(pattern, repl, string, count,flag)

import re
str1='12s3asdfa'
mathch1 = re.sub("[0-9]",'|',str1)
print(mathch1)

結(jié)果

||s|asdfa

用后面的字符替換前面的符合規(guī)則的字符。

爬蟲實(shí)例

如需要爬取豆瓣熱門電影2019,網(wǎng)址為:https://movie.douban.com/chart

首先鼠標(biāo)右鍵查看網(wǎng)頁(yè)源代碼

如我們需要爬取電影的名稱,我們搜索‘

82年生的金智英'

正則表達(dá)式的思路是通過(guò)需要爬去的字段旁邊的字符去夾住想要的字符串,如我們需要‘82年生金智英'這穿字符,我們可以用“13px;">”和“<”去夾住它。

搜索該結(jié)構(gòu)可以發(fā)現(xiàn),只有標(biāo)題會(huì)用到該結(jié)構(gòu),不會(huì)誤爬到其他無(wú)關(guān)字符串。下面上爬蟲代碼

import re
import requests
url='https://movie.douban.com/chart'
header={
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
result= requests.get(url,headers=header)
data=re.findall(r'13px\;\"\>([^\<]+)',result.text)
print(data)

結(jié)果是一個(gè)長(zhǎng)度為9的數(shù)組。

['82年生金智英 / Kim Ji-young,Born 1982', '愛爾蘭殺手(港) / 聽說(shuō)你刷房子了', '小丑起源電影:羅密歐 / Romeo', '情迷紐約下雨天(港) / 紐約有雨', '從前, 有個(gè)荷里活(港) / 從前,有個(gè)好萊塢...(臺(tái))', '長(zhǎng)安盜', '地下6號(hào) / 六尺之下', '喪尸樂園:連環(huán)尸殺(港) / 尸樂園:臟比雙拼(臺(tái))', '浴火的少女畫像(港) / 燃 燒女子的畫像(臺(tái))']

該爬蟲需要用到headers,不然會(huì)拒絕連接。

data=re.findall(r'13px\;\"\>([^\<]+)',result.text)

表示在result.text這個(gè)長(zhǎng)字符串中查找,獲取“13px;">”和“<”之間的字符串," \ "代表轉(zhuǎn)移字符,否則無(wú)法識(shí)別這些符號(hào)。

這個(gè)案例可能不是最好的使用正則表達(dá)式的例子,但是想要給大家分享的是,以后如果遇到很復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),與其一層一層解析,不妨換一種思路,使用正則表達(dá)式說(shuō)不定能夠“柳暗花明又一村”。

總結(jié)

到此這篇關(guān)于Python爬蟲教程之利用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容的文章就介紹到這了,更多相關(guān)Python爬蟲用正則表達(dá)式匹配網(wǎng)頁(yè)內(nèi)容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中字符串類型代碼的執(zhí)行函數(shù)——eval()、exec()和compile()詳解

    Python中字符串類型代碼的執(zhí)行函數(shù)——eval()、exec()和compile()詳解

    這篇文章主要介紹了Python中字符串類型代碼的執(zhí)行函數(shù)——eval()、exec()和compile(),字符串類型代碼的執(zhí)行函數(shù)有三個(gè),都是Python的內(nèi)置函數(shù),下面逐一對(duì)這三個(gè)函數(shù)詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • Bokeh:Python交互式可視化的利器詳解

    Bokeh:Python交互式可視化的利器詳解

    這篇文章主要介紹了Bokeh:Python交互式可視化的利器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • Python入門教程(二十)Python的Lambda表達(dá)式

    Python入門教程(二十)Python的Lambda表達(dá)式

    這篇文章主要介紹了Python入門教程(二十)Python的Lambda表達(dá)式,lambda表達(dá)式是一行的函數(shù)。它們?cè)谄渌Z(yǔ)言中也被稱為匿名函數(shù),lambda表達(dá)式非常有用,可以讓代碼簡(jiǎn)單,簡(jiǎn)潔,需要的朋友可以參考下
    2023-04-04
  • Python入門篇之正則表達(dá)式

    Python入門篇之正則表達(dá)式

    正則表達(dá)式是一個(gè)很有用的工具,可處理復(fù)雜的字符匹配和替換工作。在Python中內(nèi)置了一個(gè)re模塊以支持正則表達(dá)式。本文我們就來(lái)詳細(xì)探討下Python中正則表達(dá)式。
    2014-10-10
  • Python實(shí)現(xiàn)CNN的多通道輸入實(shí)例

    Python實(shí)現(xiàn)CNN的多通道輸入實(shí)例

    今天小編就為大家分享一篇Python實(shí)現(xiàn)CNN的多通道輸入實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • python使用matplotlib庫(kù)生成隨機(jī)漫步圖

    python使用matplotlib庫(kù)生成隨機(jī)漫步圖

    這篇文章主要為大家詳細(xì)介紹了使用Python的matplotlib庫(kù)生成隨機(jī)漫步圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • python二進(jìn)制讀寫及特殊碼同步實(shí)現(xiàn)詳解

    python二進(jìn)制讀寫及特殊碼同步實(shí)現(xiàn)詳解

    這篇文章主要介紹了python二進(jìn)制讀寫及特殊碼同步實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • python 中文件輸入輸出及os模塊對(duì)文件系統(tǒng)的操作方法

    python 中文件輸入輸出及os模塊對(duì)文件系統(tǒng)的操作方法

    這篇文章主要介紹了python 中文件輸入輸出及os模塊對(duì)文件系統(tǒng)的操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 解決Python報(bào)錯(cuò):ValueError:operands?could?not?be?broadcast?together?with?shapes

    解決Python報(bào)錯(cuò):ValueError:operands?could?not?be?broadcast?t

    這篇文章主要給大家介紹了關(guān)于解決Python報(bào)錯(cuò):ValueError:operands?could?not?be?broadcast?together?with?shapes的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • Python預(yù)測(cè)分詞的實(shí)現(xiàn)

    Python預(yù)測(cè)分詞的實(shí)現(xiàn)

    本文將結(jié)合實(shí)例代碼,介紹Python預(yù)測(cè)分詞的實(shí)現(xiàn),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評(píng)論

舞阳县| 民县| 黄山市| 奉化市| 齐齐哈尔市| 图木舒克市| 宁南县| 基隆市| 武川县| 乐陵市| 东安县| 遂宁市| 梅州市| 微山县| 溧阳市| 博客| 明水县| 海淀区| 怀仁县| 泽库县| 大化| 和静县| 来凤县| 清河县| 铜梁县| 吴江市| 镇沅| 宁明县| 肥西县| 山东| 浑源县| 富平县| 凌源市| 天等县| 曲麻莱县| 绥化市| 神农架林区| 景德镇市| 万年县| 宣威市| 正蓝旗|