真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python正則爬蟲的方法是什么

這篇文章主要介紹“Python正則爬蟲的方法是什么”,在日常操作中,相信很多人在Python正則爬蟲的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Python正則爬蟲的方法是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、寧晉網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、購物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為寧晉等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

1 re模塊

正則表達(dá)式(Regular Expression, Regex 或 RE)又稱正規(guī)表示法或常規(guī)表示法,常用來檢索、替換那些符合某個(gè)模式的文本。

它首先設(shè)定好一些特殊的字符及字符組合,然后通過組合的“規(guī)則字符串”來對(duì)表達(dá)式進(jìn)行過濾,從而獲取或匹配用戶想要的特定內(nèi)容。

 
1.1 re模塊

Python 通過 re 模塊提供對(duì)正則表達(dá)式的支持,但在使用正則表達(dá)式之前需要導(dǎo)入 re 模塊才能調(diào)用該模塊的功能函數(shù)。

import re
 

其基本步驟是:

  • 將正則表達(dá)式的字符串形式編譯為 pattern 實(shí)例;
  • 使用 pattern 實(shí)例處理文本并獲得一個(gè)匹配實(shí)例;
  • 使用 match 實(shí)例獲得所需信息;

常用函數(shù)是 findall,原型如下:

findall(String[, pos[, endpos]])|re.findall(pattern, string[, flags])
 

該函數(shù)表示搜索字符串 string,然后以列表形式返回全部匹配字符串。

其中,參數(shù) re 包括3個(gè)常見值。(括號(hào)內(nèi)是完整寫法)

re.I(re.IGNORECASE)  # 使匹配忽略大小寫
re.M(re.MULTILINE)   # 允許多行匹配
re.S(re.DOTALL)      # 匹配包括換行在內(nèi)的所有字符
 

另外,pattern 對(duì)象是一個(gè)編譯好的正則表達(dá)式,通過 pattern 提供的一系列方法可以對(duì)文本進(jìn)行匹配查找;pattern 對(duì)象不能直接實(shí)例化,必須使用 re.compile() 進(jìn)行構(gòu)造。

 
1.2 complie方法

re 模塊包括一些常用的操作函數(shù),比如 complie() 函數(shù),其原型如下:

re.compile(pattern[, flags])
 

該函數(shù)根據(jù)包含正則表達(dá)式的字符串創(chuàng)建模式對(duì)象,返回一個(gè) pattern 對(duì)象。其中,參數(shù) flags 是匹配模式,可以使用按位或“|”表示同時(shí)生效,也可以在正則表達(dá)式字符串中指定。

# 舉例說明如何使用正則表達(dá)式來獲取字符串中的數(shù)字內(nèi)容
import re
string = 'A1.45, b5, 6.45, 8.82'
regex = re.compile(r"\d+\.?\d*")
print(regex.findall(string))
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 
1.3 match方法

match 方法是從字符串的 pos 下標(biāo)處開始匹配 pattern,如果 pattern 結(jié)束時(shí)已經(jīng)匹配,則返回一個(gè) match 對(duì)象;如果匹配過程中 pattern 無法匹配,或者匹配未結(jié)束就已達(dá)到 endpos,則返回 None。

match 方法原型如下:

match(string[, pos[, endpos]]) | re.match(patter, string[, flags])
 

其中,參數(shù) string 表示字符串;pos 表示下標(biāo),pos 和 endpos 的默認(rèn)值分別為 0 和 len(string);參數(shù) flags 用于編譯 pattern 時(shí)指定匹配模式。

 
1.4 search方法

search 方法用于查找字符串中可以匹配成功的子字符串。從字符串的 pos 下標(biāo)處嘗試匹配 pattern,如果 pattern 結(jié)束時(shí)仍可匹配,則返回一個(gè) match 對(duì)象,如果 pattern 結(jié)束時(shí)仍無法匹配,則將 pos 加 1 后重新嘗試匹配,若知道 pos = endpos 時(shí)仍無法匹配,則返回 None。

search 方法函數(shù)原型如下:

search(string[, pos[, endpos]]) | re.search(pattern, string[, flags])
 

其中,參數(shù) string 表示字符串;pos 表示下標(biāo),pos 和 endpos 的默認(rèn)值分別為 0 和 len(string);參數(shù) flags 用于編譯 pattern 時(shí)指定匹配模式。

1.5 group和groups方法

group([group1, …]) 方法用于獲得一個(gè)或多個(gè)分組截獲的字符串,當(dāng)它指定多個(gè)參數(shù)時(shí)將以元組形式返回 None,截獲多次的組返回最后一次截獲的字符串。

groups([default]) 方法以元組形式返回全部分組截獲的字符串,相當(dāng)于多次調(diào)用 group,其中參數(shù) default 表示沒有截獲字符串的組以該值代替,默認(rèn)為 None。

 

2 Python網(wǎng)絡(luò)數(shù)據(jù)爬取的常用模塊

 
2.1 urllib模塊

urllib 是 Python 用于獲取 URL(Uniform Resource Locators,同意資源定位器)的庫函數(shù),可以用于爬取遠(yuǎn)程的數(shù)據(jù)并保存,甚至可以設(shè)置消息頭(header)、代理、超時(shí)認(rèn)證等。

urllib 模塊提供的上策接口使用戶能夠像讀取本地文件一樣讀取 WWW 或 FTP 上的數(shù)據(jù),使用起來比C++、C#等編程語言更加方便。

 2.1.1 urlopen

函數(shù)原型如下:

urlopen(url, data = None, proxies = None)
 

該方法用于創(chuàng)建一個(gè)遠(yuǎn)程 URL 的類文件對(duì)象,然后像本地文件一樣操作這個(gè)類文件對(duì)象來獲取遠(yuǎn)程數(shù)據(jù)。其中參數(shù) url 表示遠(yuǎn)程數(shù)據(jù)的路徑,一般是網(wǎng)址;參數(shù) data 表示以 post 方式提交到 url 的數(shù)據(jù);參數(shù) proxies 用于設(shè)置代理;返回值是一個(gè)類文件對(duì)象。

Python正則爬蟲的方法是什么  

本實(shí)例用來介紹 urllib 庫函數(shù)爬取百度官網(wǎng)的實(shí)例


import urllib.request
import webbrowser as web
 
url = 'http://www.baidu.com'
content = urllib.request.urlopen(url)  # 打開鏈接
 
print(content.info)     # 頭信息
print(content.geturl)   # 請(qǐng)求url
print(content.getcode)  # HTTP狀態(tài)碼
 
# 保存至本地并通過瀏覽器打開
response = urllib.request.urlopen(url).read()
open('baidu.html', 'w').write(response.decode('UTF-8'))
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 2.1.2 urlretrieve

urlretrieve 方法是將遠(yuǎn)程數(shù)據(jù)下載到本地,函數(shù)原型如下:

urlretrieve(url, filename = None, reporthook = None, data = None)
 

其中,參數(shù) filename 指定了保存到本地的路徑,如果省略該函數(shù),則 urllib 會(huì)自動(dòng)生成一個(gè)臨時(shí)文件來保存數(shù)據(jù);

參數(shù) reporthook 是一個(gè)回調(diào)參數(shù),當(dāng)連接上服務(wù)器,響應(yīng)的數(shù)據(jù)塊傳輸完畢時(shí),會(huì)觸發(fā)該調(diào)回函數(shù),通常使用該回調(diào)函數(shù)來顯示當(dāng)前的下載進(jìn)度;

參數(shù) data 是指?jìng)鬟f到服務(wù)器的數(shù)據(jù)。

本實(shí)例用來演示如何將新浪首頁爬取到本地,并保存在“F:/sina.html”文件中,同時(shí)顯示下載進(jìn)度。

from urllib.request import urlretrieve
 
# 設(shè)置函數(shù)來表示下載文件至本地,并顯示下載進(jìn)度
def Download(a, b, c):
    # a--已經(jīng)下載的數(shù)據(jù)塊
    # b--數(shù)據(jù)塊的大小
    # c--遠(yuǎn)程文件的大小
    per = 100.0 * a * b / c
    if per >100:
        per = 100
    print('%.2f%%' % per)
 
url = 'http://www.sina.com.cn'
local = 'F:/sina.html'
urlretrieve(url, local, Download)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 
2.2 urlparse模塊

urlparse 模塊主要是對(duì) url 進(jìn)行分析,其主要的操作時(shí)拆分和合并 url 各個(gè)部件。它可以將 url 拆分成 6 個(gè)部分,并返回元組,也可以把拆分后的部分再組成一個(gè) url。

urlparse 模塊包括的函數(shù)主要有 urlparse、urlunparse 等。

# python3版本中已經(jīng)將urllib2、urlparse、和robotparser并入了urllib模塊中,并且修改urllib模塊
from urllib.parse import urlunparse
from urllib.parse import urlparse
   2.2.1 urlparse函數(shù)

函數(shù)原型如下:

urlparse(urlstring[, scheme[, allow_fragments]])
 

該函數(shù)將 urlstring 值解析成 6 各部分,從 urlstring 中獲取 URL,并返回元組(scheme,netloc,path、params、query、fragment)。該函數(shù)可用于確定網(wǎng)絡(luò)協(xié)議(HTTP、FTP等)、服務(wù)器地址、文件路徑等。

from urllib.parse import urlparse
 
url = urlparse('https://blog.csdn.net/IT_charge/article/details/105714745')
 
# 輸出內(nèi)容包括以下六個(gè)部分scheme, netloc, path, params, query, fragment
print(url)
print(url.netloc)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 2.2.2 urlunparse函數(shù)

同樣可以調(diào)用 urlunparse() 函數(shù)將一個(gè)元祖內(nèi)容構(gòu)建成一條 url,函數(shù)原型如下:

urlunparse(parts)
 

該元組類似 urlparse 函數(shù),它接收元組(scheme, netloc, path, params, query, fragment)后,會(huì)重新組成一個(gè)具有正確格式的URL,以便共 Python 的其他 HTML 解析模塊使用。

from urllib.parse import urlunparse
from urllib.parse import urlparse
 
url = urlparse('https://blog.csdn.net/IT_charge/article/details/105714745')
 
# 輸出內(nèi)容包括以下六個(gè)部分scheme, netloc, path, params, query, fragment
print(url)
print(url.netloc)
 
# 重組url
u = urlunparse(url)
print(u)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 

2.3 requests模塊

requests 模塊是用 Python 語言編寫的、基于 urllib 的第三方庫,其采用 Apache2 Licensed 開源協(xié)議的 HTTP 庫。它比 urllib 更加方便,既可以節(jié)約大量的工作,又完全滿足 HTTP 的測(cè)試需求。

安裝 requests 模塊方法

pip install requests
   2.3.1 導(dǎo)入requests模塊

使用語句如下:

import requests
   2.3.2 發(fā)送GET/POST請(qǐng)求

requests 模塊可以發(fā)送 HTTP 的兩種請(qǐng)求,GET 請(qǐng)求和 POST 請(qǐng)求。其中 GET 請(qǐng)求可以采用 url 參數(shù)傳遞數(shù)據(jù),它從服務(wù)器上獲取數(shù)據(jù),而 POST 請(qǐng)求是向服務(wù)器傳遞數(shù)據(jù),該方法更為安全。

# 這里給出 get 和 post 請(qǐng)求獲取某個(gè)網(wǎng)站網(wǎng)頁的方法,得到一個(gè)命名為 response 的響應(yīng)對(duì)象,通過這個(gè)對(duì)象獲取我們所需要的信息
r = requests.get('https://github.com/timeline.json)
r = requests.post('https://httpbin.org/post)
   2.3.3 傳遞參數(shù)

url 通常會(huì)傳遞某種數(shù)據(jù),這種數(shù)據(jù)采用鍵值對(duì)的參數(shù)形式置于 URL 中。

requests通過 params 關(guān)鍵字設(shè)置 URL 的參數(shù),以一個(gè)字符串字典來提供這些參數(shù)。

# 傳遞 key1=value1 和 key2=value2 到 httpbin.org/get 后
import requests
 
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params = payload)
print(r.url)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 2.3.4 相應(yīng)內(nèi)容

requests 會(huì)自動(dòng)解碼來自服務(wù)器的內(nèi)容,并且大多數(shù) Unicode 字符集都能被無縫解碼。當(dāng)請(qǐng)求發(fā)出后,requests 會(huì)基于 HTTP 頭部對(duì)響應(yīng)的編碼做出有根據(jù)的推測(cè)。

import requests
r = requests.get('https://github.com/timeline.json')
print(r.text)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 2.3.5 定制請(qǐng)求頭

只需要簡(jiǎn)單地傳遞一個(gè)字典(dict)給消息頭 headers 參數(shù)即可。以網(wǎng)站“堆糖”為例,其 headers 參數(shù)在 User-Agent 里找。

定制請(qǐng)求頭是為了偽裝爬蟲程序,不會(huì)被網(wǎng)站輕易檢測(cè)出來,亦即不會(huì)返回 403 錯(cuò)誤。

Python正則爬蟲的方法是什么  

演示如下:

# 這里假設(shè)給 堆糖 網(wǎng)站指定一個(gè)消息頭
import requests
 
base_url = 'https://www.duitang.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
response = requests.get(url=base_url, headers=headers)
print(response)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 

3 正則表達(dá)式爬取網(wǎng)絡(luò)數(shù)據(jù)的常見方法

 
3.1 爬取標(biāo)簽間的內(nèi)容

HTML語言是采用標(biāo)簽對(duì)的形式來編寫網(wǎng)站的,包括起始標(biāo)簽和結(jié)束標(biāo)簽,比如、、等。

 3.1.1 爬取title標(biāo)簽間的內(nèi)容

首先可以采用正則表達(dá)式“‘’”來爬取起始標(biāo)簽之間的內(nèi)容。

# 本實(shí)例用來爬取百度官網(wǎng)標(biāo)題——“百度一下,你就知道”
import re
import requests
url = 'https://www.baidu.com/?tn=78040160_5_pg&ch=8'
response = requests.get(url).content.decode('utf-8')
title = re.findall(r'(.*?)', response)
print(title[0])
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 3.1.2 爬取超鏈接標(biāo)簽間的內(nèi)容

在 HTML 中, 超鏈接標(biāo)題  用于表示超鏈接。

import re
import requests
 
url = "http://www.baidu.com"
content = requests.get(url).content.decode('utf-8')
 
# 獲取完整的超鏈接
res1 = re.compile('')
urls1 = re.findall(res1, content)
for u1 in urls1:
    print(u1)
 
# 獲取超鏈接之間的內(nèi)容
res2 = re.compile('(.*?)')
urls2 = re.findall(res2, content)
for u2 in urls2:
    print(u2)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 3.1.3 爬取re標(biāo)簽和td標(biāo)簽間的內(nèi)容

網(wǎng)頁常用的布局包括 table 布局和 div 布局,其中,table 布局中常見的標(biāo)簽包括tr,th和td,tr(table row)表示表格行為,td(table data)表示表格數(shù)據(jù),th(table heading)表示表格表頭。

首先假設(shè)存在下面這樣一個(gè)HTML代碼。




    
    表格



    編號(hào)課程名
    001Python程序設(shè)計(jì)語言
    002JavaScript
    003網(wǎng)絡(luò)數(shù)據(jù)爬取及分析


 

結(jié)果如下:

Python正則爬蟲的方法是什么  

此時(shí),看看怎么使用Python代碼獲取上述信息呢?

import re
 
# 獲取 之間的內(nèi)容
f = open("t.html","r",encoding="utf-8") # 讀取文件
f = f.read()         # 把文件內(nèi)容轉(zhuǎn)化為字符串
trs = re.findall(r'(.*?)', f, re.S|re.M)
for tr in trs:
    print(tr)
 
# 獲取 之間的內(nèi)容
print('\n')
for m in trs:
    ths = re.findall(r'(.*?)', m, re.S|re.M)
    for th in ths:
        print(th)
 
# 獲取 之間的內(nèi)容
print('\n')
tds = re.findall(r'(.*?)(.*?)', f, re.S|re.M)
for td in tds:
    print(td[0], td[1])
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 
3.2 爬取標(biāo)簽中的參數(shù)
 3.2.1 爬取超鏈接標(biāo)簽的URL

HTML超鏈接的基本格式為 “  鏈接內(nèi)容  ”。

import re
 
content = '''
新聞
hao123
地圖
'''
 
res = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')"
urls = re.findall(res, content, re.I|re.S|re.M) 
for url in urls:
    print(url)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 3.2.2 爬取圖片超鏈接標(biāo)簽的URL

在HTML中,我們可以看到各式各樣的圖片,其中圖片標(biāo)簽的基本格式為“ ” ,只有通過爬取這些圖片原地址,才能下載對(duì)應(yīng)的圖片至本地。

import re
 
content = '''

'''
 
res = ''
urls = re.findall(res, content, re.I|re.S|re.M)
print(urls)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 3.2.3 獲取URL中的最后一個(gè)參數(shù)

在使用 Python 爬取圖片的過程中,通常會(huì)遇到圖片對(duì)應(yīng)的 URL 最后一個(gè)字段用來對(duì)圖片命名的情況,如前面的“gancaoduo-002.jpg”,因此就需要通過解析 URL “/” 后面的參數(shù)來獲取圖片名字。

import re
 
content = '''

'''
 
# res = ''
# urls = re.findall(res, content, re.I|re.S|re.M)
# print(urls)
 
urls = 'http://img.ivsky.com/img/tupian/pre/202001/15/gancaoduo-002.jpg'
# 采用“/”分隔字符串,進(jìn)而獲取最后一個(gè)值
picture_name = urls.split('/')[-1]
print(picture_name)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  
 

3.3 字符串處理及替換

當(dāng)使用正則表達(dá)式爬取網(wǎng)頁文本時(shí),首先需要調(diào)用 find() 函數(shù)來找到指定的位置,然后在進(jìn)行進(jìn)一步爬取。

# 比如先獲取class屬性為“infobox”的表格table,然后再進(jìn)行定位爬取
start = content.find(r'')   # 起點(diǎn)位置
end = content.find(r'')                   # 終點(diǎn)位置
infobox = text[start:end]
print(infobox)
 

在爬取過程中可能會(huì)爬取無關(guān)變量,此時(shí)需要對(duì)無關(guān)內(nèi)容進(jìn)行過濾,這里推薦使用replace()函數(shù)和正則表達(dá)式進(jìn)行處理。

import re
 
content = '''
    000軟件工程
    001Python程序設(shè)計(jì)語言

    002JavaScript
    003網(wǎng)絡(luò)數(shù)據(jù)   爬取及分析
'''
 
res = r'(.*?)(.*?)'
texts = re.findall(res, content, re.S|re.M)
for text in texts:
    print(text[0], text[1])
 

結(jié)果如下:

Python正則爬蟲的方法是什么  

此時(shí)需要過濾掉多余的字符串,如換行()、空格( )、加粗(),過濾代碼如下。

import re
 
content = '''
    000軟件工程
    001Python程序設(shè)計(jì)語言

    002JavaScript
    003網(wǎng)絡(luò)數(shù)據(jù)   爬取及分析
'''
 
res = r'(.*?)(.*?)'
texts = re.findall(res, content, re.S|re.M)
for text in texts:
    value0 = text[0].replace('
', "").replace(' ', "")
    value1 = text[1].replace('
', "").replace(' ', "")
    if '' in value1:
        text_value = re.findall(r'(.*?)', value1, re.S|re.M)
        print(value0, text_value[0])
    else:
        print(value0, value1)
 

結(jié)果如下:

Python正則爬蟲的方法是什么  

采用 replace() 函數(shù)將字符串 “” 和 “< >” 轉(zhuǎn)換成空白實(shí)現(xiàn)過濾,而加粗()則需要使用正則表達(dá)式進(jìn)行過濾 。

 到此,關(guān)于“Python正則爬蟲的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前題目:Python正則爬蟲的方法是什么
瀏覽路徑:http://weahome.cn/article/goocge.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部