一:回顧正則
find、rfind、replace
字符串處理函數(shù)只能處理固定的字符串?baby ?hello
不能處理一類字符串,通過正則表達(dá)式來進(jìn)行處理
正則規(guī)則:
單字符:. [abc] ?\d ?\D ?\w ?\W ?\s ?\S
數(shù)量修飾: * ?+ ?? ?{m} ?{m,} ?{m,n}
邊界修飾?^ ?$ ?\b(詞邊界) ?\B(非詞邊界)
子模式? (.*) ?
貪婪模式
懶惰匹配?.*? ?.+?
修飾模式
re.S ? 單行模式? re.M ? 多行模式? re.I ? 忽略大小寫
二:xpath(參考w3c)
語法:
【注】返回的是一個列表,列表中都是對象,你要記得通過下標(biāo)進(jìn)行篩選
什么是xml ?http://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路徑') ?
? ? ? 示例1:抓取站長素材?部分高清圖片
http://sc.chinaz.com/tag_tupian/OuMeiMeiNv.html
http://sc.chinaz.com/tag_tupian/OuMeiMeiNv_2.html
? ? 注意懶加載問題
示例2:?抓取糗事百科-文字【寫入**.json】
https://www.qiushibaike.com/text/?
? ? 注意url的拼接和etree對象的另外用法和除去換行