##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)
#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(.)"))
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)
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"}))
e\ normalize-space 去除文字換行空格問題
~~删除線格式~
最後使用這種方法出來xpath不是文字,是[<Element a at 0x10a8d1aa0>, <Element a at 0x10a28b910,需要轉化
可以循環
for i in kk:
i.text 出來文字