python爬蟲

爬蟲

網絡爬蟲的流程:python

  1. 獲取網頁:獲取網頁就是給一個網頁發送請求,該網頁會返回整個網頁的數據,相似在瀏覽器中鍵入網站而且按回車鍵,而後就能夠看到網站的整個內容。正則表達式

  2. 解析網頁(提取所須要的信息):就是從整個網頁的數據中提取想要的數據,相似在瀏覽去中看到網站的整個網頁,可是你須要提取你須要的信息sql

  3. 存儲信息:通常能夠存儲在csv或者數據庫中。數據庫

網絡爬蟲的技術實現:json

  1. 獲取網頁:
    1. 獲取網頁的基礎技術:requests、urllib和selenium(模擬瀏覽器也可使用谷歌模擬)
    2. 獲取網頁的進階技術:多進程多線程抓取,登錄抓取,突破IP封禁和服務器抓取。
  2. 解析網頁:
    1. 解析網頁的基礎技術:re正則表達式,Beautiful Soup和lxml
    2. 解析網頁的進階技術:解決中文亂碼問題
  3. 存儲數據:
    1. 存儲數據的基礎技術:存入txt文件中和存入csv文件中
    2. 存儲數據的進階技術:存入Mysql數據庫中和存入MongoDB數據庫中

掌握定向網絡數據爬取和網頁解析的基本能力瀏覽器

將網站當成API服務器

一 、 requests

  1. 自動爬取html頁面,自動網絡請求提交網絡

  2. 最優秀的爬蟲庫多線程

  3. 方法 說明
    requests.request() 構造一個請求,支撐如下各方法的基礎方法
    requests.get() 獲取HTML網頁的主要方法,對應HTTP的GET
    requests.head() 獲取HTML網頁頭信息的方法,對應於HTTP的HEAD
    request.post() 向HTML網頁提交POST請求的方法,對應於HTTP的POST
    request.put() 向HTML網頁提交PUT請求的方法,對應於HTTP的PUT
    request.patch() 向HTML網頁提交局部修改請求,對應HTTP的PATCH
    requests.delete() 向THTML網頁提交刪除請求,對應HTTP的DELETE
    1. requests.get(url,params = None,**kwargs)
      1. url:網頁的url連接
      2. params:url的額外參數,字典或者字節流格式,是可選擇的
      3. **kwargs:12個控制訪問的參數,是可選擇的。
  4. Requests庫的2的重要對象

    1. r = requests.get(url)

    2. Response(包含了爬蟲返回的全部內容)

    3. Response對象的屬性 說明
      r.status_code HTTP請求的返回狀態,200表示連接成功,404表示失敗(通常來講除了200,其他都是失敗的)
      r.text HTTP響應內容的字符串形式,即,url對應的頁面內容
      r.encoding 從HTTPheader中猜想的響應內容編碼方式
      r.apparent_encoding 從內容中分析出響應內容的編碼方式(備選編碼方式)
      r.content HTTP響應內容的二進制形式(主要是用於圖片等)
    4. Request

    5. r.status_code 狀態碼,若是爲200,證實能爬蟲成功,其他失敗

    6. r.headers 返回get請求得到頁面的頭部信息

    7. 若是r.header中不存在charset,能夠認爲編碼方式維ISO-8859-1(這個能夠經過r.encoding得到)

    8. 若是出現亂碼,能夠用r.apparent_encoding得到備用編碼,而後用r.encoding = '得到的編碼',也能夠直接嘗試r.encoding = 'utf-8'

  5. Requests異常

  6. 異常 說明
    r.raise_for_status() 若是不是200,產生異常requests.HTTPError
#檢測代碼是否能夠爬取
import requests


def getHTMLTEXT(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()   #若是狀態碼不是200,會出錯
        r.encoding = r.apparent_encoding
        return r.text  # 獲取頭部
    except Exception as e:
        return e



if __name__ == '__main__':
    url = "http://baidu.com"
    print(getHTMLTEXT(url))

HTTP協議

HTTP,Hypertext Transfer Protocol 超文本傳輸協議

HTTP是一個基於"請求與響應"模式的,無狀態的應用層協議

HTTP協議採用URL做爲定位網絡資源的標識。

URL格式:http://host[:post]\[path]

URL是經過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源。

  1. host:合法的Internet主機域名或者IP地址

  2. port:端口號,缺省端口爲80(默認爲80)

  3. path:請求資源的路徑

  4. HTTP協議對資源的操做

  5. 1566219086050

主要掌握get,head

網絡連接有風險,異常處理很重要:

#檢測代碼是否能夠爬取
import requests


def getHTMLTEXT(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()   #若是狀態碼不是200,會出錯
        r.encoding = r.apparent_encoding
        return r.text  # 獲取頭部
    except Exception as e:
        return e



if __name__ == '__main__':
    url = "http://baidu.com"
    print(getHTMLTEXT(url))

2、robots.txt 協議

  1. Robits Exclusion Standard網絡爬蟲排除標準

  2. 做用:網站告知網絡爬蟲那些頁面能夠爬取,那些不行。

  3. 形式:在網站根目錄下的robots.txt文件

    百度的robots協議: https://www.baidu.com/robots.txt

    # 例子:
    
    
    User-agent: Baiduspider   #(百度爬蟲引擎)容許那些用戶爬取
    Allow: /article       #容許訪問/article.html、/article/12345.com
    Disallow: /baidu      # 不容許爬取的內容
    Disallow: /s?        # 不容許爬取的內容
    Disallow: /ulink?    # 不容許爬取的內容
    Disallow: /link? # 不容許爬取的內容
    Disallow: /home/news/data/   # 不容許爬取的內容
    Disallow: /     # 禁止爬取除了Allow規定頁面以外的其餘任何界面。

    以Allow開頭URL 連接的是能夠進行爬取的內容,以Disallow開頭的連接是不容許訪問爬取的。

    若是沒有robots.txt文件,那麼就能夠爬取全部的內容。

3、 Beautiful Soup

  1. 解析Html頁面

  2. 提取相關信息

  3. BeautifulSoup

  4. 基本元素內容

遍歷

下行遍歷

上行遍歷

平行遍歷

總結,元素,功能

信息標記

國際公認的信息標記種類有三種,分別是xml,json,yaml

  1. xml 擴展標記語言

  2. json對面向對象的一種表達形式 鍵值對有類型

  3. yaml 無類型鍵值對錶達形式

通常來講yaml最容易讀,yaml的信息

信息提取

4、Projects 實戰項目A/B

5、正則表達式 Re

#正則表達式
#一種通用的字符串表達框架
#簡潔表達的一組字符串的表達式
#針對字符串表達的「簡潔」和「特徵」的是思想
#做用:
#表達文本類型的特徵
#同時查找或者替換一組字符串
#匹配字符串的所有或者部分區域
#正則表達式的使用
#編譯:將符合正則表達式語法的字符串轉化成正則表達式特徵

5.1 re匹配Ip地址

re庫的主要功能


5.3最小匹配

6、Scrapy* 網絡爬蟲原理(專業爬蟲)

相關文章
相關標籤/搜索