1. 程式人生 > >爬蟲第一課:寫爬蟲的思路

爬蟲第一課:寫爬蟲的思路

  • 什麼是爬蟲?

    爬蟲就是從網上獲得資料,它是通過程式設計來實現的。對於非計算機專業的人來說,一提到程式設計兩個字,可能就會覺得自己做不到。但其實並不是這樣,程式設計就是通過寫程式碼,來讓計算機實現你的想法。你解決問題的想法,就會影響你程式設計時寫的程式碼。對於爬蟲這件事情,就是從網上獲取資料,那麼相對應的程式碼就不會有太大的變化。比如你爬取58同城的求職和爬貓眼電影的電影資料的程式碼並不會有太大的差別。我寫過的每個關於爬蟲的程式碼,基本60%以上的部分是一樣的。

  • 爬蟲的思路

    爬蟲的目的是從網上獲取對你有需要的資料,那麼目的確定,思路就能確定。思路確定,程式碼就能確定。
    爬蟲的思路就是:
    1、獲取url(網址)。2、發出請求,獲得響應。3、提取資料。4、儲存資料。
    下面逐個解釋。
    1.獲取url(網址):
    url是統一資源定位符,對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,是網際網路上標準資源的地址。就是我們平時所說的網址。
    瀏覽器就是通過網址向伺服器傳送請求,來獲取資訊的。瀏覽器和伺服器的關係如下圖所示:
    在這裡插入圖片描述

瀏覽器向伺服器發出請求,伺服器給瀏覽器響應。一個瀏覽器可以訪問很多個伺服器,訪問具體哪個伺服器是根據瀏覽器中輸入的url,比如www.baidu.com。就是訪問百度的伺服器。
有時url可以直接複製就可以了,但有時如果想要獲取的資料在許多網頁,比如我想獲得前20頁的租房資料,那麼一個一個複製網址太麻煩,可以通過找到規律,然後構造出來所有的url。
還有時url特別長,你可以適當的去掉裡面的字串,比如淘寶網搜尋口紅之後的url是’https://s.taobao.com/search?q=口紅&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306

’。
你可以將它改成’https://s.taobao.com/search?q=口紅’,效果是一樣的。
2.傳送請求,獲得響應
伺服器裡有大量的資訊,瀏覽器是沒有資訊的,它只負責傳送請求和得到響應。比如我想獲得一些電影的資料,那我就先得到我需要資料所在的url,比如’https://movie.douban.com/’,然後通過瀏覽器向豆瓣的伺服器傳送請求,獲得響應的響應。但是我們寫爬蟲並不是通過瀏覽器獲得資料,而是通過python寫的爬蟲程式碼來獲得資料。但是如果伺服器識別出了傳送給它的請求時爬蟲發出的,那麼伺服器就會停止返回資料。這就需要寫一些程式碼將我們寫的爬蟲包裝成瀏覽器,向伺服器傳送請求,並獲得響應。響應就是該網頁的原始碼,可以在網頁中右擊選擇網頁原始碼看到。
3.提取資料。
提取資料就是在第二步中,我獲得了伺服器給我的響應,但這些響應大多數不是我想要的,我只需要其中的一部分,比如說伺服器給我返回瞭如下所示的資訊
在這裡插入圖片描述

但這些資訊看起來眼花繚亂,我只想要下圖所示的資訊
在這裡插入圖片描述
或者如下圖所示看起來更整齊的資料
在這裡插入圖片描述
這樣的資訊少而整齊,方便儲存,這就是資料的提取。就像一層過濾網一樣,將沒用的東西過濾掉,將有用的東西留下來。資料提取的方法有許多,比如正則表示式,還有beautifusoup庫。正則表示式是比較常用的方法,它是根據網頁的原始碼來提取資料的,不需要考慮網頁的結構。
4.資料的儲存
資料的儲存就是將第三步提取的資訊儲存到Excel或資料庫中,方便下次使用時檢視和分析。資料儲存這一步需要寫的程式碼幾乎是固定不變的,沒什麼技術含量,也不需要刻意去記,每次使用複製貼上就可以。程式碼如下圖所示:

#資料儲存


 f=xlwt.Workbook(encoding='utf-8')
    sheet01=f.add_sheet(u'sheet1',cell_overwrite_ok=True)
    sheet01.write(0,0,'name') #第一行第一列
    sheet01.write(0,1,'score')
    sheet01.write(0,2,'price')
    sheet01.write(0,3,'recommand_ratio')
    sheet01.write(0,4,'people_num')  
    sheet01.write(0,5,'location')
    #寫內容
    for i in range(len(DATA)):
        sheet01.write(i+1,0,DATA[i]['name'])
        sheet01.write(i+1,1,DATA[i]['score'])
        sheet01.write(i+1,2,DATA[i]['price'])
        sheet01.write(i+1,3,DATA[i]['recommend_ratio'])
        sheet01.write(i+1,4,DATA[i]['people_num'])
        sheet01.write(i+1,5,DATA[i]['location'])      
    f.save(u'E:\\貓眼電影.xls') 
  • 總結
    爬蟲就四步,1、獲得url。2、傳送請求,獲得響應。3、提取資料。4儲存資料。
    第二步和第四步過程的程式碼幾乎是不變的,不需要多深的理解,看幾個例子就可以記下來了,每次寫程式碼這兩個部分可以直接複製。第三步提取資料是每次寫爬蟲變化最大的地方,也是寫爬蟲程式碼最需要時間的和思考的地方,我覺得也是爬蟲的核心,需要認真學習和理解。第一步獲得url主要就是看翻頁之後網址的變化,然後根據變化的規律去把每一頁的url構造出來,比如淘寶網搜尋關鍵字口紅後每一頁的url是:
    第一頁:‘https://s.taobao.com/search?q=口紅s=44’
    第二頁:‘https://s.taobao.com/search?q=口紅s=88’
    第三頁:‘https://s.taobao.com/search?q=口紅s=132’

    那麼夠造出所有這些url的程式碼就是:
    比如我們先要前10的url吧
urls=['https://s.taobao.com/search?q=口紅s={}'.format(i*44) for i in range(1,11)]

這就是爬蟲的整體框架,是不是很簡單,那就把它拿下吧。