1. 程式人生 > >簡單爬蟲總結

簡單爬蟲總結

 URL:

 URL主要有三部分組成:

 (1)協議,常見的協議有http,https,ftp,file(訪問本地資料夾),ed2k(電驢的專用連結)等等。

 (2)存放資源的伺服器的域名系統(DNS)主機名或者IP地址(有時候包含埠號,各種傳輸協議都有預設的埠號)

 (3)主機資源的具體地址,如目錄和檔名等

 注意:

第一部分和第二部分用"://"符號隔開的,

第二部分和第三部分用"/"符號隔開的,

第一部分和第二部分是不可缺少的,第三部分有時候可以省略。

urllib:

 爬取網頁:

 

import urllib.request

response = urllib.request.urlopen("http://www.baidu.com")
html = response.read().decode("utf-8")
print(html)

下載一隻小貓:

import urllib.request

# req = urllib.request.Request("url")
# response = urllib.request.urlopen(req)
response = urllib.request.urlopen("url")
html = response.read().decode("utf-8")
with open("name.jpg",'wb') as f:
    f.write(html)

 注意:

 

(1)urlopen的url引數即可以是一個字串也可以是一個Request物件,如果你傳入是一個字串,那麼Python是會預設幫你

把目標字元轉換成Request物件,然後在傳入urlopen函式,如上述註釋程式碼所示。

 (2)urlopen實際上返回的是一個類檔案物件,因此你可以用read()方法來讀取內容,他還有以下三個函式會用到。

  1.geturl()--返回請求的url

  2.info()--返回一個httplib,HTTPMessage物件,包含遠端伺服器返回的頭資訊。

  3.getcode()--返回HTTP狀態碼

隱藏身份:

 UserAgent:

  對於一些伺服器來說是不願意讓爬蟲進行爬去的,這樣伺服器的壓力就會增加,伺服器一般是通過User-Agent來識別 的,普通瀏覽器會通過該內容向訪問網站提供你所使用的瀏覽器型別、作業系統、瀏覽器核心等資訊的標識。

 修改User-Agent:

  例項化Request物件的時候將headers引數傳進去或者通過add_header()方法往Request物件新增headers,如:

 

import urllib.request
import urllib.parse


head={}
head["Referer"] = ""
head["User-Agent"] = ""
data = {}
data["type"] = ""
data["keyform"] = ""
data = urllib.parse.urlencode(data).encode("utf-8")

req = urllib.request.Request(url,data,head)
# req = urllib.request.Request(url,data)
# req.add_header('Referer','')
# req.add_header('User-Agent','')
urllib.request.urlopen(req)

 

 

 

注意:如果長時間靠修改User-Agent進行抓取,那麼一個IP短時間內連續進行網頁的訪問,很可能會被服務

器識別是機器抓取,所以,這裡有兩種策略可供選擇:

 第一種就是延遲提交的時間,但是這樣會使得工作效率低下。

 第二種策略就是使用代理。

 使用代理:

  使用代理IP,伺服器看到的是代理IP地址,而不是你自己的IP地址。

 

proxy_support = urllib.request.ProxyHandler({'http':'211.138.2.4:80'})

 

  引數是一個字典,字典的鍵是代理的型別,字典的值就是代理的IP地址和對應的埠號。

 

opener = urllib.request.build_opener(proxy_support)

 

opener可以看作是一個私人訂製,當使用urlopen()函式開啟一個網頁的時候,你就是使用預設的opener在工作

所以這裡使用build_opener()函式建立了一個屬於我們自己私人定製的opener

 

urllib.request.install_opener(opener)

這裡將制定好的opener安裝到系統中,這是一勞永逸的做法

 

 

 

因為在此之後,你只需要使用普通的urlopen()函式,就是以定製好的opener進行工作的。

       如果你不想替換掉預設的opener,你也可以每次特殊需要的時候,用opener.open()的方法來開啟網頁。  

         iplist = input("請輸入IP:").split(sep=";")
         ip = random.choice(iplist) #隨機使用IPiplist = input("請輸入IP:").split(sep=";")
         ip = random.choice(iplist) #隨機使用IP

 

Beautiful Soup:

 安裝Beautiful Soup:

 開啟cmd,執行命令: python3 -m pip install BeautifulSoup4

 在IDE下from bs4 import BeautifulSoup,沒有報錯說明安裝成功

        使用Beautiful Soup:

from bs4 import BeautifulSoup

html = response.read().decode('utf-8')
soup = BeautifulSoup(html,'html.parser')
for each in soup.find_all(""):
    print(each)

 

正則表示式:

 網上查資料