2018-05-10 爬蟲筆記(二)一個簡單的實踐 —簡單獲取生物資訊達人博主主頁的資訊...

weixin_34321977發表於2018-05-12

1.建立一個專案


4287389-9f227e1d2d902c6c.png
建立一個專案

我們來看看這個專案的結構:

4287389-4bc7061d9630c81b.png
裡面就是一些核心元件

2 建立一個爬取資訊的spider

4287389-8774f995f0024434.png
建立一個hoptop的爬蟲

3 我們可以除錯一下先

使用 scrapy shell +網址

然後view (response)

but


4287389-9f7a999aa6b757dd.png
發現被禁止了

這種情況下,一般來說,就是要加一個頭資訊,有些時候,為了保留登入狀態,還需要獲得cookie的資訊。

在這裡我採用了browsercookie來自動獲取我的chrome 瀏覽器的cookie,並加上了headers再試一遍:

4 反反爬蟲

pip3 install browsercookie

4287389-cd85b95613fceb59.png
安裝browsercookie
4287389-9ec5752714d691af.png
在setting 裡面增加headers
4287389-410795f4cee163cd.png
在middleware中增加程式碼
4287389-ab5948bacd6233f2.png
在setting 中設定啟動剛剛的middlewares
4287389-9954645ca41965e7.png
最後除錯一下

出現200
然後view(response)跳出頁面
說明成功了‘

5 提取內容模組
之後就是解析頁面了,解析頁面可以使用css xpath 或者BeautifulSoup 這裡先上程式碼,因為這個屬於獨立的一塊,那個用的好久用哪個。

比如像這樣提取一個標題(用xpath):


4287389-4dcbfc2c66ab855d.png
xpath例項

6 設定item
我這裡展示一下提取文章名字和摘要
先在item.py中封裝


4287389-9faa2f8fcceec43a.png
item封裝

7 編寫spider

這裡我只是想介紹個整理,先上spider 程式碼啦

# -*- coding: utf-8 -*-
import scrapy
from ..items import SpiderProjectItem


class HoptopSpider(scrapy.Spider):
    name = 'hoptop'
    allowed_domains = ['www.jianshu.com/u/9ea40b5f607a']
    start_urls = ['http://www.jianshu.com/u/9ea40b5f607a/']

    def parse(self, response):
        content = SpiderProjectItem()
        titles = response.xpath('//*[@id]/div/a/text()').extract()
        #for one in titles:
        #    content['title'] = one
        #    yield content

        abstracts = response.xpath('//*[@id]/div/p/text()').extract()
        #for unit in abstracts:
        #    content['abstract'] = unit
        #    yield content
        n = len(titles)
        i = 0
        while i < n :
            content['title'] = titles[i]
            content['abstract'] = abstracts[i]
            i = i + 1
            yield content

我這裡的程式碼比較簡陋,只是初步提取資訊,還不包括下滑翻頁,只是展示一下而已

測試一下

scrapy crawl hoptop -o result.csv

成功了,雖然有點簡陋


4287389-6de876aca3b24072.png
結果

寫在後面:

  1. 首先要明白爬蟲用來幹什麼,一般來說,是用來批量獲取網路上的資訊資源,比如我想把hoptop的部落格全部下載下來離線看,那麼他寫了那麼多的部落格,我不可能一頁一頁地複製,所以我可以編寫爬蟲批量下載

  2. 有些時候不一定要用框架,但是框架可以幫你節約一點時間,也別是大型的專案的時候

  3. 這裡只是很簡陋地展示了一下,後續可以加入python對文字的處理能力,來規則化地獲取資訊。

4。如果要簡單地使用scrapy 我覺得步驟可以如下:
1.先用shell除錯,看看結構和反爬蟲手段
2.然後記得在setting中加上瀏覽器的headers ,編寫middlewares 可以使用chrome的Cookies模擬登陸。
3.接下來定義item中需要儲存的內容(注意是文字的)
4.然後編寫spider 解析函式

相關文章