廖雪峯爬蟲第二節

添加並查看用戶代理


import urllib.request

def load_baidu():
    url= "https://www.baidu.com"
    header = {
        #瀏覽器的版本
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
        # "haha":"hehe"
    }


    #創建請求對象
    request = urllib.request.Request(url)
	#request = urllib.request.Request(url,headers=header)
    #動態的去添加head的信息
    request.add_header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")
    #請求網絡數據(不在此處增加請求頭信息因爲此方法系統沒有提供參數)
    response = urllib.request.urlopen(request)
    print(response)
    data = response.read().decode("utf-8")

    #獲取到完整的url
    final_url = request.get_full_url()
    print(final_url)

    #響應頭
    # print(response.headers)
    #獲取請求頭的信息(所有的頭的信息)
    # request_headers = request.headers
    # print(request_headers)
    #(2)第二種方式打印headers的信息
    #注意點:首字母需要大寫,其他字母都小寫
    request_headers = request.get_header("User-agent")
    # print(request_headers)
    with open("02header.html","w")as f:
        f.write(data)



load_baidu()

隨機用不同用戶訪問瀏覽器

import urllib.request
import random

def load_baidu():

    url = "http://www.baidu.com"
    user_agent_list = [
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
        "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
        "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"

    ]
    #每次請求的瀏覽器都是不一樣的
    random_user_agent = random.choice(user_agent_list)

    request = urllib.request.Request(url)

    #增加對應的請求頭信息(user_agent)
    request.add_header("User-Agent",random_user_agent)

    #請求數據
    response = urllib.request.urlopen(request)
    #請求頭的信息
    print(request.get_header("User-agent"))

load_baidu()

爲urlopen添加代理的功能

import urllib.request

def handler_openner():

    #系統的urlopen並沒有添加代理的功能所以需要我們自定義這個功能
    #安全 套接層 ssl第三方的CA數字證書
    #http80端口# 和https443
    #urlopen爲什麼可以請求數據 handler處理器
    #自己的oppener請求數據

    # urllib.request.urlopen()
    url = "https://blog.csdn.net/weixin_43362002/article/details/104658199"

    #創建自己的處理器
    handler = urllib.request.HTTPHandler()
    #創建自己的oppener
    opener=urllib.request.build_opener(handler)
    #用自己創建的opener調用open方法請求數據
    response = opener.open(url)
    # data = response.read()
    data = response.read().decode("utf-8")


    with open("05header.html", "w",encoding='utf-8')as f:
        f.write(data)

handler_openner()

添加一個ip地址

import urllib.request
def create_proxy_handler():
    url = "https://blog.csdn.net/weixin_43362002/article/details/104658199"

    #添加代理
    proxy = {
        #免費的寫法
        "http":"http://120.77.249.46:8080"
        # "http":"120.77.249.46:8080"
        #付費的代理
        # "http":"xiaoming":[email protected]
    }
    #代理處理器
    proxy_handler = urllib.request.ProxyHandler(proxy)

    #創建自己opener
    opener = urllib.request.build_opener(proxy_handler)
    #拿着代理ip去發送請求
    response = opener.open(url)
    data = response.read().decode("utf-8")

    with open("03header.html", "w",encoding='utf-8')as f:
        f.write(data)

create_proxy_handler()

添加多個ip地址

import urllib.request

def proxy_user():

    proxy_list = [
        {"https": "106.75.226.36:808"},
        {"https":"120.77.249.46:8080"},
        {"https":"61.135.217.7:80"},
        {"https":"125.70.13.77:8080"},
        {"https":"118.190.95.35:9001"}
    ]
    for proxy in proxy_list:
        print(proxy)
        #利用遍歷出來的ip創建處理器
        proxy_handler = urllib.request.ProxyHandler(proxy)
        #創建opener
        opener = urllib.request.build_opener(proxy_handler)

        try:
            data = opener.open("http://www.baidu.com",timeout=1)

            haha = data.read()
            print(haha)
        except Exception as e:
            print(e)

proxy_user()

知識小結

1.創建request

request = urllib.request.Request(url)

2.動態添加用戶代理

request.add_header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36")

3.獲取請求頭的信息(所有的頭的信息)

request_headers = request.headers
print(request_headers)

4.第二種方式打印headers的信息

#注意點:首字母需要大寫,其他字母都小寫
request_headers = request.get_header("User-agent")
print(request_headers)

5.每次請求的瀏覽器都是不一樣的

user_agent_list = [
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1",
        "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",
        "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50"

    ]
#每次請求的瀏覽器都是不一樣的
random_user_agent = random.choice(user_agent_list)

6.爲urlopen添加代理的功能
系統的urlopen並沒有添加代理的功能所以需要我們自定義這個功能
安全 套接層 ssl第三方的CA數字證書
http–>80端口 和https–>443端口
urlopen爲什麼可以請求數據 handler處理器
自己的oppener請求數據
7.添加代理
免費代理的寫法:
“http”:“http://ip地址:端口號” 例如

“http”:“http://120.77.249.46:8080”

寫法二:

“http”:“120.77.249.46:8080”

付費代理的寫法:
“http”:“賬號”:密碼@ip地址

“http”:“xiaoming”:[email protected]

8.IP分類
透明:對方知道真實的ip
匿名:對方不知道我們真實的ip,知道了你使用了代理
高匿:對方不知道我們真實的IP,也不知道我們使用了代理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章