爬蟲 正規表示式 lxml xpath

2021-09-09 02:21:04 字數 3696 閱讀 4396

1.1 單個字元

1.2 多個字元

1.3 re模組

re.findall(「regex」),如果正規表示式進行了分組,需要考慮返回的資料情況,

r的用途

忽略轉義符號\帶來的影響,為了表示原字元本身的話,直接在正規表示式前面加上r即可

windwos下的檔案路徑需要加上r

2.1 在python中,物件的賦值就是簡單的物件引用指向

b =[1

,2,3

]a = b

那麼a和b的引用位址是一樣了,指向了同一塊記憶體位址,a即為b的乙個別名

2.2 淺拷貝是物件的外層拷貝,即只進行第一層的拷貝,

在淺拷貝的情況下,只是拷貝了最外圍的物件本身,內部的元素都只是引用的賦值,即指向

in[2]

: a =[1

,2]in[3]

: b =[3

,4]in[5]

: c =

[a,b]

in[6

]: d = copy.copy(c)

in[7]:

id(d)

out[7]

:1668591779912

in[8]:

id(c)

out[8]

:1668591213896

in[9]5

)in[10]

: cout[10]

:[[1

,2,5

],[3

,4]]

in[11

]: d

out[11]

:[[1

,2,5

],[3

,4]]

常見的淺拷貝,除了copy.copy(),還有以下函式:

2.3 深拷貝是對外圍和內部元素都進行了拷貝物件本身,而不是指向

利用copy中的deepcopy方法進行拷貝就叫做深拷貝

in[12]

: e = copy.deepcopy(c)

in[13]:

id(c)

out[13]

:1668591213896

in[14]:

id(e)

out[14]

:1668591153224

in[15]6

)in[16]

: cout[16]

:[[1

,2,5

,6],

[3,4

]]in[17

]: e

out[17]

:[[1

,2,5

],[3

,4]]

in[18]:

id(c[0]

)out[18]

:1668590642760

in[19]:

id(e[0]

)out[19]

:1668591296968

注意:對於數字,字串等,沒有被拷貝的說法,即便是用深拷貝,檢視id的話也是一樣的。

in[2]

: a =

1in[3]

: b =

"haha"

in[5

]: c = copy.copy(a)

in[6]:

id(a)

out[6]

:1903193104

in[7]:

id(c)

out[7]

:1903193104

in[8

]: d = copy.copy(b)

in[9]:

id(b)

out[9]

:1363639310744

in[10]:

id(d)

out[10]

:1363639310744

in[11

]: c = copy.deepcopy(a)

in[12]:

id(c)

out[12]

:1903193104

in[13

]: d = copy.deepcopy(b)

in[14]:

id(d)

out[14]

:1363639310744

2.4 對於元組物件,有以下兩種情況:

物件全部是不可變的資料型別,那麼copy.copy()和copy.deepcopy()的結果是一樣的,都是引用的賦值,即指向

如果物件最外圍是不可變型別,但內部包含了可變型別的資料,對於copy.copy()還是指向,但對於copy.deepcopy()則是深度拷貝

# **

in[3

]: a =[11

,22]in[4]

: b=[33

,44]in[5]

: c =

(a,b)

in[6

]: d = copy.copy(c)

in[7

]: d

out[7]

:([11

,22],

[33,44

])in[8]:

id(d)

out[8]

:3044966714056

in[9]:

id(c)

out[9]

:3044966714056

in[10

]: e = copy.deepcopy(c)

in[11]:

id(e)

out[11]

:3044968636488

@attr獲取標籤的指定屬性值

text()獲取標籤的文字內容

xpath定位

pip install lxml

from lxml import etree

text =

'''

'''# 將網頁內容載入,返回乙個element物件,具有xpath方法

el = etree.html(text)

# 將element物件還原為網頁資料的字串

print

(etree.tostring(el)

.decode())

# xpath表示式如果是定位標籤,返回的結果是乙個以element為元素的列表

li_list = el.xpath(

"//li[@class='item-1']"

)print

(li_list)

# 建議這樣寫

li_list[0]

.xpath(

"./a/@href"

)# 不建議這樣寫

li_list[0]

.xpath(

"a/@href"

)# xpath表示式如果是獲取屬性值或者文字。返回的結果是乙個以字串為元素的列表

href_list = el.xpath(

"//li[@class='item-1']/a/text()"

)print

(href_list)

資料提取的通用方式:先分組,再提取

爬蟲 正規表示式

正規表示式 regular expression 是一種字串匹配的模式 pattern 它可以檢查乙個字串是否含有某種子串 替換匹配的子串 提取某個字串中匹配的子串。匯入正則模組 importre 字元匹配 rs re.findall abc adc print rs rs re.findall a...

python爬蟲 正規表示式

正規表示式是十分高效而優美的匹配字串工具,一定要好好掌握。利用正規表示式可以輕易地從返回的頁面中提取出我們想要的內容。1 貪婪模式與非貪婪模式 python預設是貪婪模式。貪婪模式,總是嘗試匹配盡可能多的字元 非貪婪模式,總是嘗試盡可能少的字元。一般採用非貪婪模式來提取。2 反斜槓問題 正規表示式裡...

Python爬蟲 正規表示式

一般的正規表示式都可直接到正則生成工具處生成,常見匹配字元 re.match及其常規匹配 re.match 嘗試從字串的起始位置匹配乙個模式,如果不是起始位置匹配成功的話,match 就返回none。re.match pattern,string,flags 0 返回的為乙個物件,其中span代表長...