內(nèi)容簡述:? ? ?? ??? ??
? ??一:正則? ? ? ??
? ??二:Xpath? ? ? ??
一:正則復(fù)習(xí)
?? find、rfind、replace
?? 字符串處理函數(shù)只能處理固定的字符串baby? hello
?? 不能處理一類字符串,通過正則表達(dá)式來進(jìn)行處理
正則規(guī)則:
??????? 單字符:. [abc]?\d? \D? \w?\W? \s? \S
??????? 數(shù)量修飾:*?+? ?? {m}?{m,}? {m,n}
??????? 邊界修飾^?$? \b(詞邊界)? \B(非詞邊界)
??????? 子模式?(.*)? ???????
????????貪婪模式? ? ?
? ????????????? <div>呵呵<div>哈哈</div>嘿嘿</div>
'
.*
'
懶惰匹配.*?.+?
????????修飾模式
?????????????????? re.S??單行模式? re.M?? 多行模式? re.I?? 忽略大小寫
? ????【正則復(fù)習(xí)示例】
? ? ? 【正則批量提取圖片鏈接并下載示例-糗事百科圖片】
https://www.qiushibaike.com/pic/page/
二:xpath(參考w3c)
?? 【注】返回的是一個列表,列表中都是對象,記得通過下標(biāo)進(jìn)行篩選
什么是xmlhttp://www.w3school.com.cn/xml/
什么是xpath
??????? XPath使用路徑表達(dá)式在 XML 文檔中進(jìn)行導(dǎo)航
//從匹配選擇的當(dāng)前節(jié)點(diǎn)選擇文檔中的節(jié)點(diǎn),而不考慮它們的位置
.?選取當(dāng)前節(jié)點(diǎn)
@?選取屬性
????? 打開谷歌瀏覽器,安裝xpath插件,然后使用xpath插件按ctrl + shift + x
屬性定位:根據(jù)屬性查找標(biāo)簽
層級定位:一級一級查找
索引定位:【注】下標(biāo)從1開始--網(wǎng)上html
?????????? 查找id是maincontent的div下面的h1節(jié)點(diǎn)
??????????????? //div[@id="maincontent"]/h1
//div[@class="head_wrapper"]/div[@id="u"]/a[1]
邏輯運(yùn)算//div[@id="head" and@class="s_down"]
模糊匹配
??????? ????查找所有的div,id中有he的div
??????? ????????????//div[contains(@id, "he")]
??????????? 查找所有的div,id中以he開頭的div
??????????????????? //div[starts-with(@id, "he")]
??????? ????查找所有的div,id中以he結(jié)尾的div
??????? ????????????//div[ends-with(@id, "he")]
取文本
??????? ????????//div[@class="head_wrapper"]/div[@id="u"]/a[1]/text()
??????? ????????//div[@class="head_wrapper"]/div[@id="u"]/a[1]
??????? ????????obj.text?? 將內(nèi)容獲取到
? 取屬性
??????? ????????//div[@class="head_wrapper"]/div[@id="u"]/a[1]/@href
安裝模塊?lxml庫
????? 這個庫是解析html的庫,主要就是解析和提取數(shù)據(jù)
????? pip切換為國內(nèi)源
????? ????http://www.jb51.net/article/98401.htm
????? pip3 install lxml? 安裝好
?? 【注】pip安裝包的時候,要記得將fiddler關(guān)閉
三:程序中使用xpath
???? from lxml import etree
????? d_etree = etree.parse('本地html')????
????? d_etree = etree.HTML('網(wǎng)上html字符串(也可以是字節(jié)類型)')
????? d_etree.xpath('xpath路徑') 返回的是一個列表
????? 獲取到節(jié)點(diǎn)對象之后obj obj.xpath('xpath路徑')?
示例:抓取站長素材 部分高清圖片
http://sc.chinaz.com/tag_tupian/OuMeiMeiNv.html
http://sc.chinaz.com/tag_tupian/OuMeiMeiNv_2.html
? ? ? ? ?注意懶加載問題
練習(xí): 抓取糗事百科-文字【寫入**.json】
? ??https://www.qiushibaike.com/text/
? ??注意url的拼接和etree對象的另外用法和除去換行