Python爬蟲進階——Request對象之Get請求與URL編碼【英雄聯盟吧】



在上一篇中,我們是通過urllib.request.urlopen直接訪問的網頁地址,但在實際應用中,我們更多地使用urllib.request.Request對象,因為其可以封裝headers和data。

一、Request類的參數

class Request:
    def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):

注意:
url:訪問的URL地址;
data:像URL地址發送的數據,無則為GET,有則為POST;
headers:請求頭,類型為字典;
origin_req_host:日常不用,忽略;
unverifiable:日常不用,忽略;
method:默認GET,可設為POST;

二、構造Request對象

import urllib.request as ur

# 構造一個Request對象
request = ur.Request('https://edu.csdn.net/')
response = ur.urlopen(request).read()
print(response)

三、嘗試data打包

以“英雄聯盟百度貼吧”為例。

1、分析URL地址:

在這里插入圖片描述
然而,當我們將網址復制到py文件中,網址卻變成了“亂碼”?
url = 'https://tieba.baidu.com/f?kw=%E8%8B%B1%E9%9B%84%E8%81%94%E7%9B%9F&ie=utf-8&pn=0'
原來是當GET請求中有漢字時,傳遞時會對其進行URL編碼。
(其實對於任何文字都會進行編碼,只是英文和數字編碼前后一致而已。)

2、URL編碼和解碼:
import urllib.parse as up

data = {
    'kw': '英雄聯盟',
    'ie': 'utf-8',
    'pn': '0'
}
# 編碼
data_url = up.urlencode(
    data
)
print(data_url)
# 解碼
ret = up.unquote(data_url)
print(ret)
輸出如下:

在這里插入圖片描述

3、利用編碼進行百度貼吧的訪問:
import urllib.request as ur

# 應使用的是URL編碼之后的data_url
request = ur.Request('https://tieba.baidu.com/f?'+data_url)
response = ur.urlopen(request).read()
with open('baidu.html', 'wb') as f:
    f.write(response)
輸出如下:

在這里插入圖片描述

4、進行抽離和完善:
import urllib.parse as up
import urllib.request as ur

# 只需更改kw即可,還可更改pn
kw = '美劇'
data = {
    'kw': kw,
    'ie': 'utf-8',
    'pn': '0'
}
# 編碼
data_url = up.urlencode(
    data
)
print(data_url)
# 解碼
ret = up.unquote(data_url)
print(ret)

# 應使用的是URL編碼之后的data_url
request = ur.Request('https://tieba.baidu.com/f?'+data_url)
response = ur.urlopen(request).read()
with open('%s.html' % kw, 'wb') as f:
    f.write(response)


為我心愛的女孩~~



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM