網絡爬蟲介紹

什麼是爬蟲

網絡爬蟲也叫網絡蜘蛛,是一種「自動化瀏覽網絡」的程序,或者說是一種網絡機器人。它們被普遍用於互聯網搜索引擎或其餘相似網站,以獲取或更新這些網站的內容和檢索方式。它們能夠自動採集全部其可以訪問到的頁面內容,以供搜索引擎作進一步處理(分檢整理下載的頁面),而使得用戶能更快的檢索到他們須要的信息。簡單來說就是模擬瀏覽器請求網頁。html

爬蟲的用處

  • Web爬蟲做爲搜索引擎的重要組成部分
  • 創建數據集以用於研究,業務和其餘目的。好比:
       ①收集營銷數據,對營銷方案決策提供輔助。
       ②分析網民對某件事物的評價,好比新聞事件、電影、書籍等。
       ③分析行業發展趨勢,好比房價、薪資水平。
       ④社會計算方面的統計和預測,好比票房。

知識準備

http協議

  • 經常使用的請求方法GET、POST等
  • 常見的狀態碼200 OK、400 Bad Request、401 Unauthorized、403 Forbidden、404 Not Found、500 Internal Server Error、503 Server Unavailable等
  • 經常使用的請求報頭:

圖片描述

前端知識

  • 對HTML、CSS、JavaScript等有必定的掌握

爬蟲語言

  • 選擇爬蟲用的語言,好比python, 掌握python的基本語法、包的下載與使用

爬蟲的基本步驟

目標分析-》發送請求-》解析響應頁面-》存儲內容-》數據分析前端

python爬蟲用到的庫

請求庫

  • requests: requests庫是python的一個第三方請求庫,基於urllib庫(python用於HTTP請求的自帶標準庫)改寫而成,所以相比urllib庫requests更富人性化、便捷性,是爬蟲邏輯中使用最頻繁的HTTP請求庫。
  • Selenium:一個自動化測試工具庫,利用它能夠執行瀏覽器特定的動做,好比跳轉、輸入、點擊、下拉等。
  • aiohttp:提供異步Web服務,提升爬蟲...

解析庫

  • BeautifulSoup 是一個能夠從HTML或XML文件中提取數據的Python庫.它將html的標籤文件解析成樹結構,而後方便的獲取到指定標籤的對應屬性。BeautifulSoup除了支持Python標準庫中的HTML解析器以外,還支持一些第三方的解析器,BeautifulSoup官方推薦使用lxml做爲解析器。BeautifulSoup()的構造方法須要傳入兩個參數:

soup = BeautifulSoup("<html>data</html>",'lxml') //第一個參數是一段網頁代碼或一個網頁文件,第二個參數是解析網頁的庫,這裏使用lxml庫.
Beautiful Soup將複雜HTML文檔轉換成一個複雜的樹形結構,每一個節點都是Python對象。
    ①Tag:Tag 對象與XML或HTML原生文檔中的tag相同,好比soup.p表示p標籤
    ②Attributes:一個tag可能有不少個屬性. 好比<p class="boldest"> tag的屬性的操做方法與字典相同: tag['class']
    ③find()方法是找到文檔中符合條件的第一個元素,直接返回該結果。元素不存在時返回None
    ④find_all()方法是找到文檔中全部符合條件的元素,以列表的形式返回。元素不存在時返回空列表
    ⑥CSS選擇器的使用方法與CSS定位標籤的方式類似,主要有.class 和 #idpython

  • 使用正則表達式,python中的re模塊可以使用正則表達式進行匹配。
  • pyquery庫是jQuery的Python實現,可以以jQuery的語法來操做解析html文檔

存儲內容

  • 數據庫,如MySql、MongoDB
  • 文件

數據分析庫

  • jieba:是目前最好的 Python 中文分詞組件,支持 3 種分詞模式:精確模式、全模式、搜索引擎模式,同時支持繁體分詞、自定義詞典。
  • numpy:高性能科學計算和數據分析的基礎包,支持大量的維度數組與矩陣運算,此外也針對數組運算提供大量的數學函數庫。
  • pandas:pandas 是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而建立的。Pandas 歸入了大量庫和一些標準的數據模型,提供了高效地操做大型數據集所需的工具。pandas提供了大量能使咱們快速便捷地處理數據的函數和方法。
  • matplotlib 數據可視化工具,可生成各類2D圖像。

簡單示例

環境搭建

  • 安裝python3.6.5
  • 使用pip install xx 命令依次安裝requests、lxml、beautifulsoup四、jieba、numpy、pandas、matplotlib、wordcloud

初階爬蟲示例介紹

  • 爬取豆瓣上關於《權力的遊戲第七季》的全部短評
requrl = 'https://movie.douban.com/subject/' + movieId + '/comments' +'?' +'start=' + str(start) + '&limit=20' 
    response = requests.get(requrl) #發送請求
    if response.status_code == 200:
        html = response.text   # 獲取響應html內容  
        soup = BeautifulSoup(html, 'lxml') # 構建BeautifulSoup對象,使用lxml做爲解析器 
        comment_div_lits = soup.find_all('div', class_='comment')   # 找到對應標籤及屬性
        for item in comment_div_lits: # 循環
            comment = item.find_all('span', class_='short')[0].string # 獲取評論內容
            eachCommentList.append(comment) # 添加到list列表
        return eachCommentList # 返回列表

爬蟲框架scrapy

Scrapy是用純Python實現一個爲了爬取網站數據、提取結構性數據而編寫的應用框架,用途很是普遍,用戶只須要定製開發幾個模塊就能夠輕鬆的實現一個爬蟲。Scrapy 使用了 Twisted'twɪstɪd異步網絡框架來處理網絡通信,能夠加快咱們的下載速度,不用本身去實現異步框架,而且包含了各類中間件接口,能夠靈活的完成各類需求。正則表達式

scrapy組件列表

  • Scrapy Engine(引擎): 負責Spider、ItemPipeline、Downloader、Scheduler中間的通信,信號、數據傳遞等。
  • Scheduler(調度器): 它負責接受引擎發送過來的Request請求,並按照必定的方式進行整理排列,入隊,當引擎須要時,交還給引擎。
  • Downloader(下載器):負責下載Scrapy Engine(引擎)發送的全部Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理,
  • Spider(爬蟲):它負責處理全部Responses,從中分析提取數據,獲取Item字段須要的數據,並將須要跟進的URL提交給引擎,再次進入Scheduler(調度器),
  • Item Pipeline(管道):它負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、存儲等)的地方.
  • Downloader Middlewares(下載中間件):位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
  • Spider Middlewares(Spider中間件):介於Scrapy引擎和爬蟲之間的框架,主要工做是處理蜘蛛的響應輸入和請求輸出。

圖片描述

scrapy運行流程

  • 一、引擎啓動觸發事務
  • 二、引擎從調度器中取出一個連接(URL)用於接下來的抓取
  • 三、引擎把URL封裝成一個請求(Request)傳給下載器
  • 四、下載器把資源下載下來,並封裝成應答包(Response)
  • 五、爬蟲解析Response
  • 六、解析出的實體(Item),則交給實體管道進行進一步的處理
  • 七、解析出的是連接(URL),則把URL交給調度器等待抓取

建立項目步驟

  • 一、使用pip install xx命令安裝scrapy、Twisted(異步網絡框架處理網絡通信)
  • 二、進入您打算存儲代碼的目錄中,運行下列命令:scrapy startproject tutorial # tutorial爲項目名稱,自行定義

該命令將會建立包含下列內容的 tutorial 目錄:shell

tutorial/
    scrapy.cfg
    tutorial/
        __init__.py
        items.py
        pipelines.py
        settings.py
        spiders/
            __init__.py
            ...

這些文件分別是:數據庫

  • scrapy.cfg: 項目的配置文件
  • tutorial/: 該項目的python模塊
  • tutorial/items.py: 項目的目標實體文件
  • tutorial/pipelines.py: 項目的管道文件.
  • tutorial/settings.py: 項目的設置文件.
  • tutorial/spiders/: 存儲爬蟲代碼目錄

spiders目錄下新建爬蟲文件:數組

import scrapy

class testSpider(scrapy.Spider):
    name = "tutorial"
    allowed_domains = ["baidu.com"]
    start_urls = (
        'https://www.baidu.com/',
    )

    def parse(self, response):
        pass

反爬蟲與反反爬蟲介紹

常見的反爬蟲

一、經過網頁的請求頭

  • User-Agent:這個是保存用戶訪問該網站的瀏覽器的信息,例如Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36,requests庫自己的headers裏沒有User-Agent,因此網站能夠拒絕掉沒有User-Agent或者頻繁使用一個User-Agent的請求。
  • Referer:當瀏覽器發送請求時,通常都會帶上這個,表示當前請求是由哪一個連接進來的。網站也能夠拒絕沒有Referer或者頻繁使用同個Referer的請求。
  • authorization:有的網站還會有這個請求頭,這個是在用戶在訪問該網站的時候就會分配一個id給用戶,而後在後臺驗證該id有沒有訪問權限從而來進行發爬蟲。

二、用戶訪問網站的ip

當不斷地使用一個ip來訪問一個網站時,網頁後臺也會判斷你是一個機器,把你的ip封掉。瀏覽器

三、驗證碼

當頻繁請求一個網址,好比登陸時,會出現驗證碼。網絡

反反爬蟲策略

1.添加請求頭

在請求頭headers添加請求頭,好比能夠網上找別人整理的User-Agent列表,請求時從列表裏隨機取出使用。app

2.使用代理ip

網上有一些免費的代理ip,好比https://www.xicidaili.com/等,但使用的人太多了也常常被封掉,能夠本身爬取一些免費代理ip建成ip池,請求的時候從ip池隨機取出使用。也能夠購買付費的ip,質量比較高。

3.處理驗證碼

對於好比登陸時只要驗證一次的簡單圖片驗證碼,能夠把驗證碼圖片下載下來,手動輸入;對於相似滑塊驗證碼,能夠用selenium庫模擬用戶滑動解鎖;對於更復雜的驗證碼可接入收費的打碼平臺。

相關文章
相關標籤/搜索