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代表長...