python爬蟲筆記,urllib.request模塊的運用方法

1. urllib.request模塊
1.1 版本
python2 :urllib2、urllib
python3 :把urllib和urllib2合併,urllib.request
1.2 常用的方法
urllib.request.urlopen(" 網址") 作 :向網 站發起 一個請求並 獲取響應
字節流 = response.read()
字符串 = response.read().decode("utf-8")
urllib.request.Request" 網址",headers="字典") urlopen()不 支持重構 User-Agent

1.3 響應對象
read()  讀取服務器響應的內容
getcode() 返回HTTP的響應碼
geturl()  返回實際數據的URL(防止重定向問題)
2.	urllib.parse模塊
2.1 常用方法
urlencode(字典)
quote(字符串) (這個裏面的參數是個字符串)
3.請求方式
GET 特點 :查詢參數在URL地址中顯示
POST
在Request 法中添加data參數 
urllib.request.Request(url,data=data,headers=headers) 
data :表單數據以bytes類型提交,不能是str

4. requests模塊
4.1 安裝
pip install requests
 在開發 工具中安裝
4.2 request常用方法
requests.get(	網址)
4.3 響應對象response的方法
response.text 返回unicode格式的數據(str)
response.content 返回字節流數據(	二進制)
response.content.decode('utf-8')	手動進行解碼
response.url  返回url
response.encode() = ‘編碼’
4.4 requests模塊發送 POST請求
4.5 requests設置代理
使 requests添加代理只需要在請求 方法中(get/post)傳遞proxies參數就可以了
 代理網站
西刺免費代理IP:http://www.xicidaili.com/
快代理:http://www.kuaidaili.com/
代理雲:http://www.dailiyun.com/
4.6 cookie
cookie :通過在客戶端記錄的信息確定	用戶身份
HTTP是一 種 無連接協議,客戶端和服務器交互僅僅限於 請求/響應過程,結束後斷開,下 次請求時,服務器會認爲是 個新的客戶端,爲了維護他們之間的連接,讓服務器知道這是前一 個 戶發起的請求,必須在 一 個地方 保存客戶端信息。
4.7 session
session :通過在服務端記錄的信息確定用戶身份 這裏 這個session就是 一個指
的是會話
4.8 處理不信任的SSL證書
什麼是SSL證書?
 SSL證書是數字證書的 一種,類似於駕駛證、護照和營業執照的電 副本。因爲配置在服務器上,也稱爲SSL服務器證書。SSL 證書就是遵守 SSL協議,由受信任的數字證書頒發機構CA,在驗證服務器身份後頒發,具有服務器身份驗證和數據傳輸加密功能

5. requests 模塊源碼分析


以下是代碼部分
import urllib.request
# response 是響應對象
response = urllib.request.urlopen('https://qq.yh31.com/zjbq/2920180.html')

# read()把相應對象裏面的內容讀取出來
html = response.read().decode('utf-8')
print(type(html),html)

# encode() 字符串--> bytes數據類型
# decode() bytes數據類型 --> 字符串
----------------------------------------------------------------
import urllib.parse

name = {'wd':'海賊王'}

name = urllib.parse.urlencode(name)

print(name)
--------------------------------------------------------------------------
import urllib.request
import urllib.parse
baseurl = 'https://www.baidu.com/s?wd='

name = input('請輸入搜索內容:')

name = urllib.parse.quote(name)

url = baseurl + name

print(url)
---------------------------------------------------

import urllib.request

url = 'http://www.baidu.com/'

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

# 1.創建請求對象
req = urllib.request.Request(url,headers=headers)
# 2.獲取相應對象
response = urllib.request.urlopen(req)
# 3.讀取響應對象內容 read().decode('utf-8')
html = response.read().decode('utf-8')

# print(html)

# print(response.getcode()) # 返回狀態碼
print(response.geturl()) # 返回實際給我們數據的url

# 使用流程
# 1.利用Request()方法構建請求對象
# 2.利用urlopen()方法獲取響應對象
# 3.利用響應對象中的read().decode('utf-8')中的內容
--------------------------------------------------------------------
import random
import urllib.request
import urllib.parse
# 需求:輸入要爬取貼吧的名稱,在輸入爬取的起始頁和終止頁,把每一頁保存到本地

# 分析:1.找url的規律
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=0 第一頁
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=50第二頁
# https://tieba.baidu.com/f?kw=%E5%A6%B9%E5%AD%90&pn=100 第三頁
# 頁數的規律 pn = (當前頁數 - 1)*50
# 2.獲取網頁的內容
# 3.保存數據

import random
import urllib.request
import urllib.parse

# 隨機獲取一個ua
headers_list = [{ 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'},{'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'}]

headers = random.choice(headers_list)

name = input('請輸入貼吧名:')

start = int(input('請輸入起始頁:'))

end = int(input('請輸入結束頁:'))

# 對貼吧name進行編碼
kw = {'kw':name}

kw = urllib.parse.urlencode(kw)

# 拼接url 發請求 或響應 保存數據

for i in range(start,end+1):

    # 拼接url
    pn = (i - 1)*50
    baseurl = 'https://tieba.baidu.com/f?'

    url = baseurl + kw + '&pn=' + str(pn)


    # 發起請求
    req = urllib.request.Request(url,headers=headers)

    # print(url)
    res = urllib.request.urlopen(req)

    html = res.read().decode('utf-8')


    # 寫入文件
    filename = '第' + str(i) + '頁.html'

    with open(filename,'w',encoding='utf-8') as f:

        print('正在爬取第%d頁'%i)
        f.write(html)
-----------------------------------

# 請輸入你要搜索的內容 :美女 保存到本地文件 美女.html

import urllib.request
import urllib.parse

# https://www.baidu.com/s?wd=%E6%B5%B7%E8%B4%BC%E7%8E%8B

# 拼接url

baseurl = 'https://www.baidu.com/s?'

name = input('請輸入你要搜索的內容:')

# 進行urlencode()編碼
wd = {'wd':name}

name = urllib.parse.urlencode(wd)

url = baseurl + name

# print(url)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36','Cookie':'BIDUPSID=4FA733ACE6D4F90A52D99F5F363CD85A; PSTM=1576929032; sug=3; sugstore=0; ORIGIN=0; bdime=0; BAIDUID=4FA733ACE6D4F90A83BE743C46630339:SL=0:NR=10:FG=1; BD_UPN=12314753; BDUSS=VFPUlFGU0RER1ZtcDdTR1lPek5vcEdZcUMtRFNNUkN3VHZTb35Cb1hRR0duOHRlRVFBQUFBJCQAAAAAAAAAAAEAAADzvSajSjdnaGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYSpF6GEqReR; MCITY=-158%3A; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=; H_PS_645EC=9e896%2FhdaWy7uBsYfIeQKxjhCoWB1I56kSiZk45G7DyeSZsVpqa6Fx3Np2k; COOKIE_SESSION=3052_0_9_9_86_16_0_0_9_8_15_0_0_0_10_0_1588076550_0_1588079592%7C9%235669_143_1586614174%7C9'
}
# 創建請求對象
req = urllib.request.Request(url,headers=headers)

# 獲取響應對象
res = urllib.request.urlopen(req)
# 讀取響應對象內容
html = res.read().decode('utf-8')

# 寫入文件
with open('結果.html','w',encoding='utf-8') as f:

    f.write(html)
----------------------------------------

data = {
    'i': '你好',
    'from': 'AUTO',
    'smartresult': 'dict',
    'client': 'fanyideskweb',
    'salt': '15880623642174',
    'sign': 'c6c2e897040e6cbde00cd04589e71d4e',
    'ts': '1588062364217',
    'bv': '42160534cfa82a6884077598362bbc9d',
    'doctype': 'json',
    'version': '2.1',
    'keyfrom':'fanyi.web',
    'action': 'FY_BY_CLICKBUTTION'

}


# https://www.baidu.com/s?wd=%E5%A6%B9%E5%AD%90



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