欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python爬蟲教程之利用正則表達式匹配網頁內容

 更新時間:2020年12月08日 14:32:48   作者:鹿鳴Llane  
這篇文章主要給大家介紹了關于Python爬蟲教程之利用正則表達式匹配網頁內容的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

Python爬蟲,除了使用大家廣為使用的scrapy架構外,還有很多包能夠實現一些簡單的爬蟲,如BeautifulSoup、Urllib、requests,在使用這些包時,有的網絡因為比較復雜,比較難以找到自己想要的代碼,在這個時候,如果能夠使用正則表達式,將能很方便地爬取到自己想要的數據。

何為正則表達式

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

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

Python使用正則表達式

re.match

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

結果

1

如果要匹配12,則

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

結果

['12']

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

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

re.search

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

結果

1

從頭到尾匹配字符,直到找到一個匹配,需要.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)

結果

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

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

re.findall()

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

運行結果

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

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

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

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

結果

||s|asdfa

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

爬蟲實例

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

首先鼠標右鍵查看網頁源代碼

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

82年生的金智英'

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

搜索該結構可以發(fā)現,只有標題會用到該結構,不會誤爬到其他無關字符串。下面上爬蟲代碼

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)

結果是一個長度為9的數組。

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

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

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

表示在result.text這個長字符串中查找,獲取“13px;">”和“<”之間的字符串," \ "代表轉移字符,否則無法識別這些符號。

這個案例可能不是最好的使用正則表達式的例子,但是想要給大家分享的是,以后如果遇到很復雜的網絡結構,與其一層一層解析,不妨換一種思路,使用正則表達式說不定能夠“柳暗花明又一村”。

總結

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

相關文章

  • 使用python和opencv的mask實現摳圖疊加

    使用python和opencv的mask實現摳圖疊加

    這篇文章主要介紹了使用python和opencv的mask實現摳圖疊加操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python實現多個視頻文件合成畫中畫效果

    python實現多個視頻文件合成畫中畫效果

    這篇文章主要為大家詳細介紹了python實現多個視頻文件合成畫中畫效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python中urllib.request和requests的使用及區(qū)別詳解

    python中urllib.request和requests的使用及區(qū)別詳解

    這篇文章主要介紹了python中urllib.request和requests的使用及區(qū)別詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Pytorch中使用TensorBoard詳情

    Pytorch中使用TensorBoard詳情

    這篇文章主要介紹了Pytorch中使用TensorBoard詳情,TensorBoard的前段數據顯示和后端數據記錄是異步I/O的,即后端程序將數據寫入到一個文件中,而前端程序讀取文件中的數據來進行顯示
    2022-06-06
  • pycharm2021激活碼使用教程(永久激活親測可用)

    pycharm2021激活碼使用教程(永久激活親測可用)

    pycharm2021激活碼是一個可以輕松幫助用戶免費激活pycharm2021.1軟件的文件,雖然說pycharm現在只是推出了2021.1的EAP版,但是如果你想先率先體驗一波,那么就可以利用小編提供的這個激活碼來進行使用啦,并這個激活碼是永久有效的
    2021-03-03
  • Django Haystack 全文檢索與關鍵詞高亮的實現

    Django Haystack 全文檢索與關鍵詞高亮的實現

    這篇文章主要介紹了Django Haystack 全文檢索與關鍵詞高亮的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • python的debug實用工具 pdb詳解

    python的debug實用工具 pdb詳解

    這篇文章主要介紹了python的debug實用工具 pdb詳解,首先,介紹一下 pdb 調試,pdb 是 python 的一個內置模塊,用于命令行來調試 Python 代碼,需要的朋友可以參考下
    2019-07-07
  • pandas分組排序 如何獲取第二大的數據

    pandas分組排序 如何獲取第二大的數據

    這篇文章主要介紹了pandas分組排序 獲取第二大的數據的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python3中的函數與參數及空值問題

    python3中的函數與參數及空值問題

    這篇文章主要介紹了python3-函數與參數以及空值,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • 詳解numpy的argmax的具體使用

    詳解numpy的argmax的具體使用

    這篇文章主要介紹了詳解numpy的argmax的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05

最新評論