爬二手市場手機號碼

一、設計工作流,分成兩步:第一步,先在列表頁里面把所有詳情頁的鏈接抓取然后保存到數(shù)據(jù)庫;第二部,從數(shù)據(jù)庫中依次取出鏈接爬取詳情頁的詳細信息并保存到新的數(shù)據(jù)庫列表中。

二、利用BeatifulSoup的select方法判斷頁面是否有效

抓取列表頁時,一旦抓空就停止抓取,因為這樣表明列表頁已經全部爬取完畢了。判斷是否抓空很簡單:

...

titles = soup.select('a.t strong')

...

if titles:

...

因為soup.select方法沒抓到東西會返回空列表,抓到東西就返回標簽對象的列表,所以直接由它的返回值可知是否成功抓取。

空列表[]在python3判斷式中等價于False,如果要反向判斷,就用邏輯運算符not []等價判定為True。

>>> bool([])

False

>>> bool(not [])

True

三、str字符串的方法split()返回的是一個列表list,不管該列表有多少元素,如果split有字符串參數(shù),就會先去除參數(shù),然后在原參數(shù)處分割字符串;如果split沒有參數(shù),就會去除所有格式符和空格,并按照在原格式符空格處分割字符串,返回其列表。

split()的特殊之處:

(1)如果在字符串開頭參數(shù)重復匹配,匹配多少個,就插入多少個空字符串到返回的列表中;

(2)如果在字符串結尾參數(shù)重復匹配,匹配多少個,就插入多少個空字符串到返回的列表中;

(3)如果在字符串中間參數(shù)重復匹配,匹配n個,就插入n-1個空字符串到返回的列表中;

例如:

>>> s='**sgng***ssksg***'

>>> s.split('*')

['', '', 'sgng', '', '', 'ssksg', '', '', '']

四、split()與strip()的區(qū)別:

(1)split()不賦參時可以用來去除字符串中所有格式符和空格,但strip()只能去除字符串兩頭的格式符和空格,中間存在的格式符和空格去除不了,因為strip()相當于lstrip()和rstrip()的共同作用,去除字符串開頭的格式符和空格與去除字符串結尾的格式符和空格。

(2)split()返回一個列表,strip()返回還是字符串。

>>> r=' ?\n\tha ? ?\n\tngng\t\n\n ?\n'

>>> r.split()

['ha', 'ngng']

>>> r.lstrip()

'ha ? ?\n\tngng\t\n\n ?\n'

>>> r.rstrip()

' ?\n\tha ? ?\n\tngng'

>>> r.strip()

'ha ? ?\n\tngng'

五、stripped_strings

stripped_strings是標簽對象的方法,該標簽對象可以是多重嵌套的標簽,該方法返回一個生成器,該生成器就是依次生成該標簽對象里分散的各個字符串。

特別注意:

(1)、soup.select方法返回的是一個標簽對象的列表,所以soup.select的返回值不能直接調用stripped_strings。

(2)、stripped_strings是一個生成器,可迭代(可以for循環(huán)獲得全部值),要得到標簽對象里去除格式符,空格和標簽格式后的字符串,就必須用list方法或者for循環(huán)等對其進行迭代取值。

title = soup.select()

list(title[0].stripped_strings)


(3)、strings方法和stripped_strings類似,區(qū)別是strings不去除格式符,空格和標簽格式。

六、每個函數(shù)應該注釋,寫出參數(shù)意義,功能,返回值意義;每個函數(shù)應該能夠單獨賦參測試。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容