一、概況

上一篇我們用一個表情網站入門瞭爬蟲,爬瞭很多表情。今天我們繼續在爬的路上,今天就爬個校花吧,畢竟妹子屬於稀缺資源,要不媽媽總會問,你到底找不找女朋友瞭,爬點校花吧,以後跟媽媽聊天,可以哭著對她說,這就是我女朋友,漂亮吧~。行瞭,為瞭媽媽不擔心,我們開始行動吧。

二、準備

在爬之前,我們要確定我們爬取的網站以及要爬取的哪些信息。

  • 目標網站:校花網(http://www.xiaohuar.com/list-1-1.html)
  • 獲取信息:
    • 校花的名字
    • 校花的照片
    • 校花的詳細資料

確定好要爬的東西,就開始分析網站,其實我特別想獲取聯系方式,可是實力不允許呀。沒有~

三、首頁分析

  • URL地址變化分析
    • 第一頁:http://www.xiaohuar.com/list-1-0.html
    • 第二頁:http://www.xiaohuar.com/list-1-1.html
    • 第五頁:http://www.xiaohuar.com/list-1-4.html

不解釋瞭,每頁的地址應該能看的清清楚楚,明明白白。

  • 提取信息分析 我們確定瞭每張圖片都是一個獨立的div標簽,那麼我首要任務就是把每頁的div標簽全部在爬下來

我們隨便點一個div,看看裡面的標簽,從每個div裡面我們可以取出下面這些信息。那麼詳細信息我們去哪取,對,校花的詳細信息在詳情鏈接,我們要把詳情鏈接取出來,在去裡面看看有什麼?

打開詳細鏈接,我們可以看到如下信息,是我們想要的,有些信息確實沒有,那也沒辦法瞭。

先分析到這,詳情頁的信息,我們先不管在哪個標簽下,先把我們目前想要的這些信息獲取出來在說。

四、首頁提取

我們用xpath插件先簡單定位一下,xpath有個特別好用的功能,就是模糊定位,我們發現想要的div標簽class屬性都包含一個一樣的樣式名字。 – 註意: 一定確保隻是你想要的內容包括的樣式。如果下面這個包含的是item屬性,就會取出126個,這肯定是不對的。功能雖好,但是一定要慎重使用。

我們已經把最重要的信息詳情地址爬取下來瞭,剩下的就是代碼實現,代碼跟上一篇的鬥圖啦項目的邏輯差不多。

import requests
from lxml import etree
import os

class XHSpider():

def __init__(self):
# 默認第一頁開始
self.pn = 0
# 默認URL
self.url = 'http://www.xiaohuar.com/list-1-{0}.html'

# 添加請求頭,模擬瀏覽器
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'
}

# 發起請求
def loadpage(self):
# 拼接請求地址
req_url = self.url.format(self.pn) # http://www.xiaohuar.com/list-1-0.html

print(req_url)

# 發起請求
reponse = requests.get(url=req_url, headers=self.headers)

# 取返回的內容
content = reponse.text

'''
註意:如果發現用xpath插件在瀏覽器上能取到標簽,但是在代碼裡面取不到
最好把請求下來的源代碼保存到代碼,分析一下為什麼取不到,有時候
瀏覽器裡面的源代碼跟你在代碼裡面請求的源碼可能稍微不一樣。
'''
with open('xiaohua.html','w') as f:
f.write(content)

# 構造xpath解析對象
html = etree.HTML(content)

# 先取出這個頁面所有div標簽
div_list = html.xpath('//div[contains(@class,"masonry_brick")]')

for div in div_list:
# 從從每個div標簽取出詳情頁鏈接 .代表當前位置
desc_url = div.xpath('.//div[@class="img"]//a/@href')[0]

# 標題
img_title = div.xpath('.//div[@class="img"]//img/@alt')[0]

# 封面圖片地址
img_url= div.xpath('.//div[@class="img"]//img/@src')[0]

print(desc_url)

if __name__ == "__main__":
xhs = XHSpider()
xhs.loadpage()

#打印
http://www.xiaohuar.com/p-1-1997.html
http://www.xiaohuar.com/p-1-1995.html
http://www.xiaohuar.com/p-1-1994.html
http://www.xiaohuar.com/p-1-1993.html
http://www.xiaohuar.com/p-1-1991.html
http://www.xiaohuar.com/p-1-1986.html
......