1 、安裝可執行程序html
2 、配置環境變量python
根據環境變量的前後順序
去查找可執行程序文件,若是查找到就執行,若是查找不到就報錯。web
3 、python的多版本兼容問題ajax
修改可執行程序的文件名,再配置環境變量json
4 、hash案例cookie
import hashlib def md5_encryption(value): """ 對字符串進行加密 :param value:待加密的字符串 :return:進行md5加密後的值 """ md5 = hashlib.md5() md5.update(value.encode('utf-8')) return md5.hexdigest()
1、 get請求dom
(1)、使用步驟ide
import requests # 一、導包 response = requests.get(url) # 二、發送請求,獲取響應 response.text # 三、獲取響應內容
(2)、get請求詳細參數post
requests.get( url=url, # 請求的url headers=headers # 請求頭【字典】 params=params # 請求參數【字典】 ) # 返回一個response對象
(3)、response對象的屬性編碼
獲取響應正文的內容
response.text
:獲取字符串格式的響應正文內容response.content
:獲取二進制格式的響應正文內容獲取響應正文的編碼類型:response.encoding
之因此可以經過response.text
獲取響應內容的字符串,是由於requests底層
使用response.encoding
來將正文的二進制
類型變成字符串
的。
其餘
response.status_code
:狀態碼response.headers
:響應頭亂碼問題的解決辦法
產生亂碼的緣由就編解碼時不一致,能夠經過如下兩種方法解決:
get請求案例
案例一:將百度貼吧的前10頁保存到本地
import requests import os base_url = 'http://tieba.baidu.com/f?' kw = '劉亦菲' # 搜索的關鍵詞 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', } filename = './tieba/' + kw # 爬取的網頁存放路徑 if not os.path.exists(filename): # 若是不存在存放該網頁的目錄,就建立此目錄 os.mkdir(filename) # 將網頁的前10頁保存到本地 for i in range(10): params = { 'kw': kw, 'ie': 'utf-8', 'pn': i*50 } response= requests.get(url=base_url, headers=headers, params=params) with open(filename+'/'+kw+str(i+1)+'.html', 'w', encoding='utf-8') as f: f.write(response.text)
案例二:百度翻譯
import requests base_url = 'https://fanyi.baidu.com/sug/' kw = 'product' data = { 'kw': kw } headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'x-requested-with': 'XMLHttpRequest', 'cookie': cookie; 'origin': 'https://fanyi.baidu.com', 'referer': 'https://fanyi.baidu.com/', 'content-length': str(len(str(data))), # 參數內容中全部全部字符的長度 } response = requests.post(url=base_url, headers=headers, data=data) # 若是response的內容是json數據,能夠經過reponse.json()直接獲取json數據,返回的是一個字典或者list json_data = response.json() res = '' for data in json_data['data']: res += data['v'] + '\n' print(res)
2、 post請求
(1)、post請求詳細參數
requests.get( url=url, # 請求的url headers=headers # 請求頭【字典】 data=data # 請求參數【字典】 ) # 返回一個response對象
一般不少網頁是經過Ajax發送post請求獲取數據,此時須要找發送Ajax請求攜帶的數據,也就是請求參數。
找請求參數有兩種方法:
案例一:有道翻譯
import requests import hashlib import time import random base_url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' kw = 'run' def get_md5(value): md5 = hashlib.md5() md5.update(value.encode('utf-8')) return md5.hexdigest() """ 因爲salt、sign和ts這3個參數由fanyi.js文件中js動態生成的 所以在發送post請求前,須要去動態地生成它們的值 salt = "" + (new Date).getTime() + parseInt(10 * Math.random(), 10) ts = "" + (new Date).getTime() sign = n.md5("fanyideskweb" + e + salt + "n%A-rKaT5fb[Gy?;N5@Tj") """ salt = str(time.time()*1000) + str(random.randint(1, 10)) sign = get_md5("fanyideskweb" + kw + salt + "n%A-rKaT5fb[Gy?;N5@Tj") ts = str(int(time.time() * 1000)) data = { 'i': kw, 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': salt, 'sign': sign, 'ts': ts, 'bv': '710f3e24cb0088b9d9ea448919deb3bb', 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'http://fanyi.youdao.com', 'Referer': 'http://fanyi.youdao.com/', 'Cookie': 'OUTFOX_SEARCH_USER_ID_NCOO=1291930369.870429; _ga=GA1.2.27463077.1574943185; _gid=GA1.2.609141079.1574943185; OUTFOX_SEARCH_USER_ID="10809467@10.108.160.18"; JSESSIONID=aaa7W8E0vjuZ-5hRbD26w; ___rl__test__cookies=1575019115684', 'Content-Length': str(len(str(data))), } response = requests.post(url=base_url, headers=headers, data=data) json_data = response.json() res = '' for data in json_data['smartResult']['entries']: res += data print(res)