日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python爬虫 教程: re正则表达式解析html页面

發(fā)布時(shí)間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫 教程: re正则表达式解析html页面 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
  • 正則表達(dá)式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符")。

  • 正則表達(dá)式通常被用來(lái)匹配、檢索、替換和分割那些符合某個(gè)模式(規(guī)則)的文本。

一、常用正則表達(dá)式

單字符:. : 除換行以外所有字符[][aoe] [a-w] 匹配集合中任意一個(gè)字符\d :數(shù)字 [0-9]\D : 非數(shù)字\w :數(shù)字、字母、下劃線、中文\W : 非\w\s :所有的空白字符包,括空格、制表符、換頁(yè)符等等。等價(jià)于 [ \f\n\r\t\v]。\S : 非空白數(shù)量修飾:* : 任意多次 >=0+ : 至少1>=1? : 可有可無(wú) 0次或者1{m} :固定m次 hello{3,}{m,} :至少m次{m,n} :m-n次邊界:$ : 以某某結(jié)尾 ^ : 以某某開頭分組:(ab) 貪婪模式: .*非貪婪(惰性)模式: .*?re.I : 忽略大小寫re.M :多行匹配re.S :單行匹配re.sub(正則表達(dá)式, 替換內(nèi)容, 字符串)

練習(xí):

import re#提取出python key="javapythonc++php" re.findall('python',key)[0] # 都有引號(hào)#提取出hello world key="<html><h1>hello world<h1></html>" re.findall('<h1>(.*)<h1>',key)[0]#提取170 string = '我喜歡身高為170的女孩' re.findall('\d+',string)#提取出http://和https:// key='http://www.baidu.com and https://boob.com' re.findall('https?://',key)#提取出hello key='lalala<hTml>hello</HtMl>hahah' #輸出<hTml>hello</HtMl> re.findall('<[Hh][Tt][mM][lL]>(.*)</[Hh][Tt][mM][lL]>',key)#提取出hit. key='bobo@hit.edu.com' #想要匹配到hit. re.findall('h.*?\.',key)#匹配sas和saas key='saas and sas and saaas' re.findall('sa{1,2}s',key)#匹配出i開頭的行 string = '''fall in love with you i love you very much i love she i love her'''re.findall('^i.*',string,re.M)#匹配全部行 string1 = """<div>靜夜思 窗前明月光 疑是地上霜 舉頭望明月 低頭思故鄉(xiāng) </div>"""re.findall('.*',string1,re.S)

注意:re.findall()通常匹配出來(lái)的是列表,所以要通過(guò)索引的方式將內(nèi)容提取出來(lái)。

二、數(shù)據(jù)解析-正則表達(dá)式

1. 需求:爬取糗事百科中所有糗圖照片

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' import requests import re import os#創(chuàng)建一個(gè)文件夾 if not os.path.exists('./qiutuLibs'): # 注意里面要有引號(hào)os.mkdir('./qiutuLibs')headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' }url = 'https://www.qiushibaike.com/pic/' page_text = requests.get(url=url,headers=headers).text#進(jìn)行數(shù)據(jù)解析(圖片的地址) ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>' #不相關(guān)的可以用.*,非貪婪匹配#re.S單行匹配 src_list = re.findall(ex,page_text,re.S) print(src_list)for src in src_list: src = 'https:'+src #發(fā)現(xiàn)src屬性值不是一個(gè)完整的url,缺少了協(xié)議頭#對(duì)圖片的url單獨(dú)發(fā)起請(qǐng)求,獲取圖片數(shù)據(jù).content返回的是二進(jìn)制類型的響應(yīng)數(shù)據(jù)img_data = requests.get(url=src,headers=headers).contentimg_name = src.split('/')[-1] # url 最后一個(gè)斜杠的就是圖片名img_path = './qiutuLibs/'+img_namewith open(img_path,'wb') as fp:fp.write(img_data)print(img_name,'下載成功!')



2. 糗圖分頁(yè)爬取

import requests import re import os# 創(chuàng)建一個(gè)文件夾 if not os.path.exists('./qiutuLibs'):os.mkdir('./qiutuLibs')headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36' }#封裝一個(gè)通用的url模板 url = 'https://www.qiushibaike.com/pic/page/%d/?s=5185803'for page in range(1,36):new_url = format(url%page) #不要忘了format,里面不加引號(hào)page_text = requests.get(url=new_url, headers=headers).text# 進(jìn)行數(shù)據(jù)解析(圖片的地址)ex = '<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'src_list = re.findall(ex, page_text, re.S) # re.S單行匹配,因?yàn)轫?yè)面源碼里面有 \n# 發(fā)現(xiàn)src屬性值不是一個(gè)完整的url,缺少了協(xié)議頭for src in src_list:src = 'https:' + src# 對(duì)圖片的url單獨(dú)發(fā)起請(qǐng)求,獲取圖片數(shù)據(jù).content返回的是二進(jìn)制類型的響應(yīng)數(shù)據(jù)img_data = requests.get(url=src, headers=headers).contentimg_name = src.split('/')[-1]img_path = './qiutuLibs/' + img_namewith open(img_path, 'wb') as fp:fp.write(img_data)print(img_name, '下載成功!')


觀察各個(gè)頁(yè)面之間的關(guān)聯(lián)



輸入1,結(jié)果自動(dòng)跳轉(zhuǎn)到首頁(yè)

注意:url使用format的編寫格式

#封裝一個(gè)通用的url模板 url = 'https://www.qiushibaike.com/pic/page/%d/?s=5185803'for page in range(1,36):new_url = format(url%page) #不要忘了format,里面不加引號(hào)

3. 爬取糗事百科指定頁(yè)面的糗圖,并將其保存到指定文件夾中

''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書! ''' import requests import re import osif __name__ == "__main__":url = 'https://www.qiushibaike.com/pic/%s/'headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',}#指定起始也結(jié)束頁(yè)碼page_start = int(input('enter start page:'))page_end = int(input('enter end page:'))#創(chuàng)建文件夾if not os.path.exists('images'):os.mkdir('images')#循環(huán)解析且下載指定頁(yè)碼中的圖片數(shù)據(jù)for page in range(page_start,page_end+1):print('正在下載第%d頁(yè)圖片'%page)new_url = format(url % page)response = requests.get(url=new_url,headers=headers)#解析response中的圖片鏈接e = '<div class="thumb">.*?<img src="(.*?)".*?>.*?</div>'pa = re.compile(e,re.S)image_urls = pa.findall(response.text)#循環(huán)下載該頁(yè)碼下所有的圖片數(shù)據(jù)for image_url in image_urls:image_url = 'https:' + image_urlimage_name = image_url.split('/')[-1]image_path = 'images/'+image_nameimage_data = requests.get(url=image_url,headers=headers).contentwith open(image_path,'wb') as fp:fp.write(image_data)

總結(jié)

以上是生活随笔為你收集整理的Python爬虫 教程: re正则表达式解析html页面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。