python爬蟲第一天

第一天:前端

爬蟲概要:python

爲何咱們要學習爬蟲?web

首先請問:都說如今是‘大數據時代’,那數據從何而來?瀏覽器

  1. 企業產生的用戶數據:百度指數,阿里指數,新浪微博指數。
  2. 數據平臺購買數據:數據堂,國雲數據市場,貴陽大數據交易所。
  3. 政府/機構購買數據:中華人民共和國國家統計局,納斯達克。
  4. 爬取網絡數據:本身動手豐衣足食。

 

 

 

 

 

 

什麼是大數據:安全

多大的數據纔算大數據?服務器

B: bytes(字節)微信

K:1K = 1024B 1K=2**10網絡

M:1M = 1024K 1M=2**20session

G:1G = 1024M 1G=2**30多線程

4G=2**32

T:1T = 1024G 1T = 2**40

P:1P = 1024T 1P=2**50

E:1E = 1024P 1E=2**60

所謂的大數據在100T-10P之間。

 

 

 

 

 

 

爬蟲的定義:

網絡爬蟲(又稱網頁蜘蛛,網絡機器人)就是模擬客戶端發送網絡請求,接收請求的響應,按照必定的規則,自動地抓取互聯網信息的程序。

只要是瀏覽器能作的,原則上,爬蟲都能作

網絡爬蟲的更多用途:

12306搶票

網站上的投票

短信轟炸—》找到不少註冊網站添加對應的手機號,發送驗證碼,就能實現短信轟炸。(往後你惹出禍來,不把師傅說出來就好了)

 

舉例12306—》攜程

微信—》搜狗微信

兩個陣營的鬥爭

爬蟲——反爬蟲——反反爬蟲

 

爬蟲與反爬蟲的鬥爭

反爬蟲:驗證碼、流量監控(封IP、封session、封userAgent)

反反爬蟲:驗證碼圖像識別、代理、隨機userAgent、……

 

爬蟲與反爬蟲的鬥爭最後勝利的一方永遠是爬蟲

 

注意:搜索引擎也是爬蟲。反爬蟲總不可能去反搜索引擎吧

 

爲何用python作爬蟲?

PHP:PHP是作後臺的,小型網站。爬蟲是在前端運行的。確定是不合適。

Java:Java既能夠作後臺,也能夠作爬蟲。可是Java比較臃腫,修改Java代碼比較耗人力

C/C++:C/C++是作嵌入式的。若是讓搞嵌入式的人作爬蟲有點大材小用了,資源浪費

Python:輕量級。快速更新迭代。代碼易讀。有不少已成型的庫,直接import就能夠了。支持多線程

 

 

爬蟲的分類

1通用爬蟲:一般指搜索引擎的爬蟲

2.聚焦爬蟲:針對特定網站的爬蟲

 

通用搜索引擎工做原理

想想:若是咱們本身實現一個和百度同樣的網站須要怎麼作?

 

通用爬蟲和聚焦爬蟲工做流程

搜索引擎流程:抓取網頁à數據存儲à預處理à提供檢索服務,網站排名

聚焦爬蟲流程:

爲何要從響應內容提取url?(拿翻頁舉例)

通用搜索引擎的侷限性

  1. 通用搜索引擎所返回的網頁裏90%的內容無用。
  2. 不一樣用戶搜索的目的不徹底相同,可是返回內容相同。

 

Robots協議

網站經過robots協議告訴搜索引擎哪些頁面能夠抓取,哪些頁面不能抓取。

例如:https://www.taobao.com/robots.txt

 

複習HTTP HTTPS

http協議(超文本傳輸協議):是一種發佈和接收HTML頁面的方法。

https:簡單來說是http的安全版,在http下加入SSL層。

SSL(安全套接字層)主要用於web的安全傳輸協議,在傳輸層對網絡鏈接進行加密,保障在internet上數據傳輸的安全。

http默認的端口:80

HTTPS默認的端口:443

https比http更安全,可是性能更低(多了加解密的過程)

 

url的形式

形式 scheme://host[port]/path…/[?query-string][anchor]

scheme:協議(例如:http,https,ftp)

host:服務器的IP地址或者域名

port:服務器的端口號

path:訪問資源的路徑

query-string:參數

anchor:錨

 

http常見請求頭

host(主機和端口號)

connection(鏈接類型)

Upgrade-Insecure-Requests (升級爲HTTPS請求)

User-Agent (瀏覽器名稱)

Accept (傳輸文件類型)

Referer (頁面跳轉處)

Accept-Encoding(文件編解碼格式)

Cookie (保存用戶的我的信息)

x-requested-with :XMLHttpRequest  (是Ajax 異步請求)

 

常見的請求方法

GET

POST

二者有什麼區別呢?

POST請求更安全,適用於表單,提交數據量很大的時候。

常見響應狀態碼(status code)

200:成功

302:臨時轉移至新的url

307:臨時轉移至新的url

404:not found

500:服務器內部錯誤

 

Requests使用入門

問題:爲何學習requests,而不是utllib?

  1. requests的底層實現就是urllib
  2. requests在Python2和python3中通用,方法徹底同樣
  3. 簡單易用
  4. requests可以自動幫助咱們解壓(gzip壓縮的等)網頁內容

發送簡單的請求

需求:經過requests向百度首頁發送請求,獲取百度首頁的數據

response = requests.get(url)

response的經常使用方法:

  1. response.text(返回的是Unicode格式的數據)
  2. response.content(返回的是字節流數據)
  3. response.status_code(查看響應碼)
  4. response.request.headers(請求頭)
  5. response.headers(響應頭)

import requests

# 發送請求
r = requests.get('https://www.baidu.com/img/bd_logo1.png')

# 保存
# wb以二進制的方式寫入
with open("a.png", 'wb') as f:
    f.write(r.content)

print(r.request.headers)

 

發送帶header的請求

爲何請求須要帶上header?

模擬瀏覽器、欺騙服務器、獲取和瀏覽器一致的內容

header的形式:字典

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

用法:requests.get(url,headers=headers)

 

發送帶參數的請求

什麼叫作請求參數:

參數的形式:字典

kw = {‘wd’:’歐冠’}

用法:requests.get(url,params=kw)

相關文章
相關標籤/搜索