1. 程式人生 > >爬蟲day01 基本介紹,請求

爬蟲day01 基本介紹,請求

目錄

9.WEB

11.作業

1.網路爬蟲

    1.定義:網路蜘蛛 網路機器人 ,抓取網路資料的程式     2.總結:用python程式去模仿人去訪問網站,模仿的越逼真越好     3.目的:通過有效的大量的資料分析市場走勢,公司的決策 2.企業獲取資料的方式     1.公司自有     2.第三方資料平臺購買         資料堂 貴陽大資料交易所     3.爬蟲爬取資料         市場上沒有或者價格太高,利用爬蟲程式去爬取 3.python做爬蟲的優勢     python:請求模組,解析模組豐富成熟     PHP:對多執行緒,非同步支援不夠好     JAVA: 程式碼笨重,程式碼量大     C/C++:雖然效率高,但是程式碼成型太慢 4.爬蟲的分類     1.通用的網路爬蟲(搜尋引擎引用,需要遵守robots協議)         1.搜尋引擎如何獲取一個新網站的url             1.網站主動向搜尋引擎提供(百度站長平臺)             2.和DNS服務商(萬網),快速收錄新網站     2.聚焦網路爬蟲         自己寫的爬蟲程式:面向主題爬蟲 面向需求爬蟲

        爬蟲 反爬蟲 反反爬蟲 5.爬取資料步驟     1.確定需要爬取的url地址     2.通過HTTP/HTTPS協議來獲取響應的HTML頁面     3.提取HTML頁面裡有用的資料         1.所需資料,儲存         2.頁面中其他的URL,繼續 2 步

6.Chrome瀏覽器外掛

    1.外掛安裝         1.右上角-更多工具-擴充套件程式         2.點開 開發者模式         3.把外掛退拽到瀏覽器介面     2.外掛介紹         1.Proxy SwitchOmega:代理切換外掛         2.XPath Helper:網頁資料解析外掛         3.JSON View:檢視json格式的資料(好看)

7.Filldler抓包工具

    1.抓包設定         1.設定Filldler抓包工具         2.設定瀏覽器代理

8.Anaconda 和 spyder

    1.anaconda:開源的python發行版本     2.Spyder:整合的開發環境         spyder常用快捷鍵             1.註釋/取消註釋:ctrl+1             2.儲存:ctrl+s             3.允許程式:F5

9.WEB

    1.HTTP 和 HTTPS         1.HTTP:80         2.HTTPS:443 HTTP的升級版     2.GET 和 POST         1.GET:查詢引數會在URL上顯示出來         2.POST:查詢引數和提交資料在form表單裡,不會再URL地址上顯示     3.URL         http://  item.jd.com   :80  /26606127795.html #detail          協議     域名/IP地址  埠  要訪問的資源路徑   錨點      4.User-Agent         記錄使用者的瀏覽器,作業系統等,為了讓使用者獲取更好的HTML頁面效果

        Mozilla : Firefox(Gecko核心)         IE : Trident()         Linux : KHTML(like Gecko)         Apple : Webkit(like KHTML)         google : Chrome(like webkit)

10.爬蟲請求模組

    1. urllib.request         1.版本             1.python2中:urllib 和 urllib             2.python3中:把兩者合併,urllib.request         2.常用方法             1.urllib.request.urlopen("url")             作用:向網站發起請求並獲取響應

import urllib.request
url = "http://www.baidu.com/"
# 發起請求並獲取響應物件
response = urllib.request.urlopen(url)
# 響應物件的read()方法獲取響應內容
# read()得到的是 bytes 型別
# decode() bytes -> string
html = response.read().decode("utf-8")
print(html)

     2、urllib.request.Request(url,headers={})         1、重構User-Agent,爬蟲和反爬蟲鬥爭第一步         2、使用步驟           1、構建請求物件request :Request()           2、獲取響應物件response :urlopen(request)           3、利用響應物件response.read().decode("utf-8")

import urllib.request

url = "http://www.baidu.com/"
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}

# 1.構建請求物件
request = urllib.request.Request(url,headers=headers)
# 2.獲取響應物件
response = urllib.request.urlopen(request)
# 3.獲取響應物件內容
html = response.read().decode("utf-8")
# 獲取響應碼
print(response.getcode())
# 獲取響應報頭資訊
print(response.info())

    3. 請求物件request方法         1. add_header()               作用 : 新增/修改headers(User-Agent)         2. get_header("User-agent") : 只有U是大寫               作用 : 獲取已有的HTTP報頭的值

import urllib.request

url = "http://www.baidu.com/"
headers = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"

# 1.構建請求物件
request = urllib.request.Request(url)
# 請求物件方法 add_header()
request.add_header("User-Agent",headers)
# 獲取響應物件
response = urllib.request.urlopen(request)

# get_header()方法獲取 User-Agent
print(request.get_header("User-agent"))

    4. 響應物件response方法         1. read() : 讀取伺服器響應的內容         2. getcode()               作用 : 返回HTTP的響應碼                 200 : 成功                 4XX : 伺服器頁面出錯                 5XX : 伺服器出錯         3. info()               作用 : 返回伺服器響應的報頭資訊   2.urllib.parse     1.quote("中文") 見:04_quote編碼.py     2.urlencode(字典)           url : wd="美女"

          d = {"wd":"美女"}           d = urllib.parse.urlencode(d)           print(d)           結果 : wd=%E7%BE%8E%E5%A5%B3     3.unquote("編碼之後的字串")

import urllib.request
import urllib.parse

headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
url = "http://www.baidu.com/s?wd="
key = input("請輸入要搜尋的內容:")
# 編碼,拼接URL
key = urllib.parse.quote(key)
fullurl = url + key
# 構建請求物件
request = urllib.request.Request(fullurl,headers=headers)
# 獲取響應物件
response = urllib.request.urlopen(request)
# read().decode()
html = response.read().decode("utf-8")
print(html)
import urllib.request
import urllib.parse

baseurl = "http://www.baidu.com/s?"
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
key = input("請輸入要搜尋的內容:")
# urlencode編碼,引數一定要是字典
d = {"wd":key}
d = urllib.parse.urlencode(d)
url = baseurl + d
# 構建請求物件
request = urllib.request.Request(url,headers=headers)
# 獲取響應物件
response = urllib.request.urlopen(request)
# 獲取內容
html = response.read().decode("utf-8")
print(html)

  3.百度貼吧資料抓取     要求:       1.輸入貼吧的名稱       2.輸入抓取的起始頁和終止頁       3.把每一頁的內容儲存到本地:第1頁.html 第2頁.html     步驟:       1. 找URL規律(拼接URL)         第1頁 :http://tieba.baidu.com/f?kw=達內&pn=0     第2頁 :http://tieba.baidu.com/f?kw=達內&pn=50     第3頁 :http://tieba.baidu.com/f?kw=達內&pn=100     第n頁 :pn=(n-1)*50       2. 獲取響應內容

      3. 儲存到本地/資料庫

# 資料抓取
import urllib.request
import urllib.parse

baseurl = "http://tieba.baidu.com/f?"
headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}

name = input("請輸入貼吧名:")
begin = int(input("請輸入起始頁:"))
end = int(input("請輸入終止頁:"))
# URL進行編碼
kw = {"kw":name}
kw = urllib.parse.urlencode(kw)
# 寫迴圈拼接URL,發請求獲響應,寫入本地檔案
for page in range(begin,end+1):
    # 拼接URL
    pn = (page-1)*50
    url = baseurl + kw + "&pn=" + str(pn)
    # 發請求,獲響應
    req = urllib.request.Request(url,headers=headers)
    res = urllib.request.urlopen(req)
    html = res.read().decode("utf-8") # 字串
    # 寫檔案/儲存到本地
    filename = "第" + str(page) + "頁.html"
    with open(filename,"w",encoding="utf-8") as f:
        print("正在下載第%d頁" % page)
        f.write(html)
        print("第%d頁下載成功" % page)
        print("*" * 30)
# 封裝成類後

import urllib.request
import urllib.parse

class BaiduSpider:
    def __init__(self):
        self.baseurl = "http://tieba.baidu.com/f?"
        self.headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16"}
    
    # 請求並讀取頁面內容
    def getPage(self,url):
        req = urllib.request.Request(url,headers=self.headers)
        res = urllib.request.urlopen(req)
        html = res.read().decode("utf-8")
        return html

    # 儲存到本地檔案
    def writePage(self,filename,html):
        with open(filename,"a",encoding="utf-8") as f:
            f.write(html)
    
    # 主函式
    def workOn(self):
        name = input("請輸入貼吧名:")
        begin = int(input("請輸入起始頁:"))
        end = int(input("請輸入終止頁:"))
        kw = {"kw":name}
        kw = urllib.parse.urlencode(kw)
        for page in range(begin,end+1):
            pn = (page-1) * 50
            url = self.baseurl + kw + "&pn=" + str(pn)
            print("正在下載第%d頁" % page)
            html = self.getPage(url)
            filename = "第" + str(page) + "頁.html"
            self.writePage(filename,html)
            print("第%d頁下載成功" % page)        
    
if __name__ == "__main__":
    # 建立物件
    spider = BaiduSpider()
    # 物件呼叫類內方法
    spider.workOn()

11.作業

  1、爬取貓眼電影top100榜     1、程式執行,直接爬取第1頁     2、是否繼續爬取(y/n):       y :爬取第2頁       n :爬取結束,謝謝使用     3、把每一頁的內容儲存到本地 第1頁.html ...

    普通版 && 類

  2、步驟     1、URL     2、獲取響應內容     3、寫入本地