
爬蟲(chóng)項(xiàng)目的重要一步就是分析網(wǎng)頁(yè)結(jié)構(gòu),抓取并返回特定的value,比如爬房?jī)r(jià)的租金、房型、小區(qū)等。此時(shí)需要找到request返回的網(wǎng)頁(yè)內(nèi)容的特定標(biāo)簽比如<a>,<div>等,并返回到dataframe,再進(jìn)行數(shù)據(jù)清洗和處理。一般可以用的兩個(gè)工具(庫(kù)):1. 正則表達(dá)式(re);2(beautifulsoup4)。下面就介紹了正則表達(dá)式的主要功能:即匹配、查找、分割、替換等。
1. 為什么要在字符串前加r'?
避免將字符串中可能出現(xiàn)的\等轉(zhuǎn)意字符進(jìn)行轉(zhuǎn)意,使用r后,則其作為一個(gè)raw string。比如\n在轉(zhuǎn)意的場(chǎng)景下為“換行”命令;而\n在raw string下則為兩個(gè)字符分別是\,n.

2. match與search的差異
match從頭部開(kāi)始匹配,一旦失敗,返回結(jié)果;search則查找整個(gè)字符串,直到找到一個(gè)匹配值;

3. 正則修飾符
用以限制通用的匹配規(guī)則

4.正則表達(dá)式模式
4.1字母和數(shù)字代表他們本身
4.2\字母和\數(shù)字通常有特殊意義

4.3標(biāo)點(diǎn)符號(hào)通常有特殊意義,除非被轉(zhuǎn)義他們才是他自己

4.4反斜杠本身需要使用反斜杠轉(zhuǎn)義:r'\'='\\'
5. 項(xiàng)目實(shí)戰(zhàn)-通過(guò)正則表達(dá)式爬取鏈家的租房頁(yè)詳情url
5.1 網(wǎng)頁(yè)結(jié)構(gòu)分析
鏈家的北京租房信息頁(yè)是一個(gè)租房信息清單(如下圖),共計(jì)100頁(yè)(每頁(yè)30套房源),這里以其中的第一頁(yè)為例,一起看看如何批量抓取當(dāng)頁(yè)所有房源的詳情頁(yè)url。大體的思路是:通過(guò)網(wǎng)頁(yè)的機(jī)構(gòu)分析,找出詳情頁(yè)url在匯總頁(yè)的一個(gè)獨(dú)特標(biāo)簽,從而使用正則表達(dá)式對(duì)其進(jìn)行查找和返回(re.findall())

這里要推薦chrome瀏覽器超好用的F12開(kāi)發(fā)者工具,必須是網(wǎng)頁(yè)機(jī)構(gòu)分析利器。開(kāi)發(fā)者工具的左上角小圖標(biāo)可以對(duì)網(wǎng)頁(yè)對(duì)應(yīng)元素進(jìn)行查找對(duì)應(yīng)code。
經(jīng)過(guò)分析發(fā)現(xiàn):詳情頁(yè)的url均出現(xiàn)在<div標(biāo)簽class屬性=pic-panel下的<a標(biāo)簽里的href屬性(tips:網(wǎng)頁(yè)里url通常都出現(xiàn)在href屬性后)。
于是有了下面這個(gè)正則表達(dá)式規(guī)則pi='<div.*?class="pic-panel">.*?<a.*?target.*?href="(.*?)"'。具體的含義是:.*?均為轉(zhuǎn)義符:.匹配任意字符;*則匹配該任意字符可出現(xiàn)0~無(wú)限次;?則對(duì)該組合僅匹配一次(非貪婪匹配);注意“.*?”為常用模糊匹配的組合,用的多就熟練記住啦,可以代替空格、換行或者中間夾雜的一大堆字母,對(duì)特定標(biāo)簽出現(xiàn)的地方進(jìn)行定位。href后面的(代表對(duì)查找的數(shù)據(jù)pi進(jìn)行切片,僅就該切片部分返回列表-即url部分)。這種方法非常適合于查找類似AXXB這樣的字符串,即明確前后出現(xiàn)的字符串(A、B),返回中間的部分(XX)。

5.2 代碼
大致代碼如下:
