爬蟲中的正規表示式

2022-09-07 17:36:19 字數 3746 閱讀 3122

目錄收集建議

正規表示式的心法

參考資料

建議爬蟲初學者做完簡單**爬蟲的所有技能(requests+bs4)思考題。

正規表示式是你掌握簡單**爬蟲之後的高階技能,如果requests+bs4就可以滿足需求,為什麼自己要平添煩惱。

因為遇到了棘手的問題,不然誰會去學這麼難懂的正規表示式

今天爬取的**是:為知筆記吧首頁,爬取的內容是回覆數

stop!別點上面的文字,點選文字的時候,用簡單**爬蟲的所有技能(requests+bs4)提到的檢查元素工具看看文字背後的真實url,這是乙個非常好的上網習慣。檢查了之後,接著往下看。

看看網頁源**是不是真的包含了我們要的內容—回覆數

# -*- coding: utf-8 -*-

import requests

from bs4 import beautifulsoup

url = ""

web_data = requests.get(url, headers=headers)

# 新知識點 web_data.content

# 以位元組的方式訪問web_data,所以用'wb'模式寫入

網頁源**裡包含了回覆數,那麼我們來用css selector語法把內容提取出來吧。稍等,看看soup裡有沒有

# -*- coding: utf-8 -*-

import requests

from bs4 import beautifulsoup

url = ""

web_data = requests.get(url, headers=headers)

web_data.encoding = 'utf-8'

web_text = web_data.text

soup = beautifulsoup(web_text, 'lxml')

with open('soup_text.txt', 'w') as f:

f.write(str(soup)) # soup物件轉成字串

到此,我們要學正規表示式了!用正確的工具,做正確的事

# -*- coding: utf-8 -*-

import re

import requests

from bs4 import beautifulsoup

url = ""

web_data = requests.get(url, headers=headers)

web_data.encoding = 'utf-8'

web_text = web_data.text

reply_nums = re.findall(r'(?<="回覆">)[\s\s]*?(?=)', web_text)

文章不涉及招式的講解,需要自學正規表示式基礎內容如零寬斷言、懶惰模式、貪婪模式等

最容易理解的乙個想法,也就是re.search()的用法: 掃瞄整個字串並返回第乙個成功的匹配

爬取帖子的建立時間,觀察網頁結構,寫出匹配時間的正則

# -*- coding: utf-8 -*-

import re

import requests

url = ""

web_data = requests.get(url, headers=headers)

web_data.encoding = 'utf-8'

source_code = web_data.text

## 匹配時間的正則

time_pattern = r'\d-\d-\d\s\d:\d'

# 匹配第乙個時間

create_time = re.search(time_pattern, source_code).group()

print(create_time)

反覆聚焦匹配帖子建立者的使用者名稱,可以先想一想怎麼匹配,再讀源**

如果你對網頁結構敏感性越高,那麼寫出的正則適用性越大,通過檢查元素,發現使用者名稱存在於一段html**中,這段**有乙個class,class="d_name",d_name有什麼含義?嘿嘿嘿

suoai1335

# -*- coding: utf-8 -*-

import re

import requests

url = ""

web_data = requests.get(url, headers=headers)

web_data.encoding = 'utf-8'

source_code = web_data.text

# 匹配包含使用者名稱正規表示式

include_username_pattern = r'(?<=)'

# 匹配出來包含使用者名稱的html**

include_username = re.search(include_username_pattern, source_code).group()

# 匹配使用者名稱的正規表示式

username_pattern = r'(?<=target="_blank">)[\s\s]*'

# first time

username = re.search(username_pattern, include_username).group()

print(username)

下面用動畫來演示一下,一般我們容易掉進乙個誤區裡,認為要匹配什麼,就只寫匹配內容的正規表示式,可是呢?這個正規表示式又很難寫,寫完了又不是很通用,這個時候可以考慮換一種思路,發散一下思維,寫乙個正規表示式來匹配更多的內容,然後針對這一內容,再寫乙個正規表示式,最終取得自己想要的內容。

正規表示式30分鐘入門教程

感謝閱讀,看張輕鬆一下

**動手,你才能學會程式設計

分享,你才能學得透徹

**

爬蟲 正規表示式

正規表示式 regular expression 是一種字串匹配的模式 pattern 它可以檢查乙個字串是否含有某種子串 替換匹配的子串 提取某個字串中匹配的子串。匯入正則模組 importre 字元匹配 rs re.findall abc adc print rs rs re.findall a...

python爬蟲 正規表示式

正規表示式是十分高效而優美的匹配字串工具,一定要好好掌握。利用正規表示式可以輕易地從返回的頁面中提取出我們想要的內容。1 貪婪模式與非貪婪模式 python預設是貪婪模式。貪婪模式,總是嘗試匹配盡可能多的字元 非貪婪模式,總是嘗試盡可能少的字元。一般採用非貪婪模式來提取。2 反斜槓問題 正規表示式裡...

Python爬蟲 正規表示式

一般的正規表示式都可直接到正則生成工具處生成,常見匹配字元 re.match及其常規匹配 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match pattern,string,flags 0 返回的為乙個物件,其中span代表長...