天天看點

知識點-re和xpath進階用法

##1.re正規表達式

特殊字元:

^:代表以該字元為開頭。如^b就是b為開頭。
.: 代表任意一個字元。如^b.就是b開頭後面一個字母任意
*: 代表前一個字元可以出現任意次(0個也可以)。如^b.*就是b開頭後面可有任意數個任意字母
$: 代表前一個字元為結尾符合。 如:.*3$就是以3為結尾的任意字元串
?:非貪婪比對。一般情況從右往左比對正則,?可以實作從左往右,非貪婪指遇到第一個就結束。.*?(b.*?b).*就是首先開始的b和b之間的字元串
+: 代表前面的字元至少出現一次(1個到無數個)。如b.+指b後面至少一個任意字母{2} {2,5} {2, }: 代表前面的字元出現2次。代表前面的字元出現2到5次. 代表前面字元出現2次及兩次以上
|:代表或的意思 b|c,從左到右,看先比對到那個。
(): 代表子字元串。如((a|b)123)代表group(1)為外層括号裡的a123|b123;group(2)為内層括号值
[]: 代表[]内的字元滿足任意一個都可以。1 ,[abcdefg]123代表以裡面任意abcdefg中一個字母開頭的都可以 2,[0-9] [a-z]代表可以為0-9範圍内任意一個字元,代表a-z範圍任意一個字元 3: [^1] ^為取反,隻要不等于1就可以
        注!(進入[]的字元都不再具有特殊含義[.*]就指比對到.或者*) 

\s \S: 1:\s代表比對到一個空格。2:\S代表比對到一個非空格
\w \W: 比對單詞字元[a-zA-Z0-9_]/非單詞字元
[\u4E00-\u9FA5]: 比對中文漢字
\d: 比對數字
{m}  {m,n}: {m}比對前一個字元m次,{m,n}比對前一個字元m到n次
-------------------------------------------------

           
import re

url='<td class="td4"><div>Pre-A</div><span class="m">1000萬</span>人民币<div>融資完成</div></td>'

a=re.findall(">(\d*[\u4E00-\u9FA5]+)<",url)
print(a)
           
知識點-re和xpath進階用法
知識點-re和xpath進階用法

#2.xpath解析

a.string()用法

from lxml import etree

a="""
    <ul>
        <li>你好</li>
        <li>我好</li>
        <li>大家好</li>
    </ul>
"""
a=etree.HTML(a)
b=a.xpath("//ul")[0]
print(b)
print(b.xpath("string(.)"))

           
知識點-re和xpath進階用法
知識點-re和xpath進階用法

b.contains()用法(id或者class樣式有多個值時)

舉例:
a.xpath('//div[contains(@class,"col-xs-10")]/a/@href')
           

c.starts-with()用法(選取摸個屬性@[email protected]@href以某字元數開頭選取)

a="""
    <ul>
        <li id="acb">你好</li>
        <li>我好</li>
        <li>大家好</li>
    </ul>
"""
a=etree.HTML(a)
b=a.xpath('//li[starts-with(@id,"ac")]/text()')
print(b)


           
知識點-re和xpath進階用法

d、結合re用法(re:match)

#這句話也是必須寫出的

from lxml import etree
# import re

a="<div class='cc123'>2134</div>"
b=etree.HTML(a)
print(b.xpath('//div/@class')[0])
print(b.xpath('//div[starts-with(@class,"cc")]/text()'))
print(b.xpath(r'//div[re:match(@class,"\d+")]/text()',namespaces={"re": "http://exslt.org/regular-expressions"}))
           
知識點-re和xpath進階用法

e\ normalize-space 去除文字換行空格問題

~~删除線格式~

知識點-re和xpath進階用法
知識點-re和xpath進階用法
知識點-re和xpath進階用法

最後使用這種方法出來xpath不是文字,是[<Element a at 0x10a8d1aa0>, <Element a at 0x10a28b910,需要轉化

可以循環
for i in kk:
   i.text 出來文字
           

繼續閱讀