python復習第14天:靜態(tài)爬蟲之requests


title: python復習第14天:靜態(tài)爬蟲之requests
date: 2020-04-05 15:00:24
tags:
- python
- 爬蟲
categories: python復習
top: 15


requests模塊詳解

模塊安裝

  • 建議新建一個虛擬環(huán)境后再安裝
conda create -n xxxx python=3.8  # 新建一個虛擬環(huán)境,并且指定python版本
conda activate xxxx    # 激活該虛擬環(huán)境
  • 也可以直接在pycharm中新建一個項目,選擇conda虛擬環(huán)境
  • pip或者conda安裝新環(huán)境
  • 具體安裝方法如下:
conda install requests
pip install requests

get請求

  • get請求為http協(xié)議常用請求,主要有4部分,請求url,請求頭,請求方法,請求參數(shù)
  • 下面演示下載百度官網(wǎng)
import requests
url = 'https://www.baidu.com'  # 請求url
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/80.0.3987.149 Safari/537.36'
}  # 請求頭,從瀏覽器中粘貼過來的
response = requests.get(url, headers=headers)  # 將相應放到response變量
print(response)  # response是一個object,默認打印是狀態(tài)碼
"""
<Response [200]>
"""
  • 如果要打印網(wǎng)頁,可以用reponse.text
print(response.text)

response常用屬性與方法

  • response:默認顯示狀態(tài)碼

  • response.text:顯示文本內(nèi)容,一般為html或者xml時使用

  • response.content:顯示二進制內(nèi)容,如果是圖片或者不確定編碼方式時使用

  • response.json():顯示json對象,如果是json格式時使用

  • response.url:顯示返回的url,一般和原請求網(wǎng)頁一樣,觸發(fā)有跳轉

  • response.headers:顯示返回頭

  • response.cookies:顯示cookies

get方法加參數(shù)請求

  • 以百度搜索查詢?yōu)槔?/li>
import requests
url = 'https://www.baidu.com/s'  # 請求url
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/80.0.3987.149 Safari/537.36'
}  # 請求頭,從瀏覽器中粘貼過來的
params = {
    'ie': 'UTF-8',
    'wd': '你好'
}  # 加入兩個請求參數(shù),可以直接從url中提取
response = requests.get(url, headers=headers, params=params)  # 將相應放到response變量
print(response.text)

post請求

  • 當網(wǎng)頁提交數(shù)據(jù),如登錄,填寫調(diào)查問卷并提交,都是用post請求
  • post請求用于提交數(shù)據(jù)到服務器,數(shù)據(jù)庫予以儲存或者相應新內(nèi)容
  • 以某翻譯網(wǎng)站為例
import requests
url = 'http://fy.iciba.com/ajax.php?a=fy'
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) \
    Chrome/80.0.3987.149 Safari/537.36'
}  # 請求頭,從瀏覽器中粘貼過來的
data = {
    'f': 'auto',
    't': 'auto',
    'w': 'hello',
}
response = requests.post(url, headers=headers, data=data)  # 將相應放到response變量
print(response)
print(response.json())
"""
<Response [200]>
{'status': 0, 'content': {'ph_en': "h?'l??", 'ph_am': 'h??lo?', 'ph_en_mp3': '',
 'ph_am_mp3': 'http://res.iciba.com/resource/amp3/1/0/5d/41/5d41402abc4b2a76b9719d911017c592.mp3', 
 'ph_tts_mp3': 'http://res-tts.iciba.com/5/d/4/5d41402abc4b2a76b9719d911017c592.mp3', 
'word_mean': ['int. 哈嘍,喂;你好,您好;表示問候;打招呼;', 'n. “喂”的招呼聲或問候聲;', 'vi. 喊“喂”;']}}
"""

session會話保持

  • http是無狀態(tài)的,沒有記憶性,服務器通過創(chuàng)建session與cookies而達到記憶功能。sesssion存服務器,cookies存用戶瀏覽器
  • 如果用戶想要通過爬蟲模擬登錄,訪問,下載功能,就必須要是同一個會話,也就是必須持有相同的cookies
  • 如果需要登錄后才能做很多事情,那么可以通過requests模塊創(chuàng)建session會話,這樣就和普通用戶登錄,訪問是一個效果。
  • 以模擬登錄人人網(wǎng)為例:
import requests

url = 'http://www.renren.com/PLogin.do'
data = {
    'email': 'xxxxxx',  # 你的賬號
    'password': 'xxxxxxxx',  # 你的密碼
    'autoLogin': 'true'  # 是否自動登錄
}
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)\
     Chrome/80.0.3987.149 Safari/537.36'
}
s = requests.session()  # 創(chuàng)建session會話
s.post(url, headers=headers, data=data)  # post請求模擬登錄
url2 = 'http://www.renren.com/914644077'  # 自己提取自己的主頁url
response = s.get(url2, headers=headers)  # 嘗試訪問個人主頁
print(response.text)  # 打印網(wǎng)頁內(nèi)容,看看有沒有你的用戶名啥的,最好就是保存到本地看看對比一下
s.close()  # 關閉會話

代理訪問

  • 有時候有些網(wǎng)站必須要用代理才能訪問

  • 或者如果你頻繁用一個ip訪問一個網(wǎng)站,容易被封號

  • 所以用代理可以給你換不同的馬甲,突破反爬封鎖

  • 下面使用代理訪問百度

import requests

url = 'https://www.baidu.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)\
     Chrome/80.0.3987.149 Safari/537.36'
}
proxies = {
    'http': '218.75.102.198:8000'
}
response = requests.get(url, proxies=proxies, headers=headers, timeout=20)  # 20秒連接不成功就超時退出
print(response)
"""
<Response [200]>
"""

AJAX

  • Asynchronous Javascript And XML,即javaScript和xml
  • 通常表現(xiàn)為刷網(wǎng)頁的時候,只顯示一下部分,當你往下瀏覽的時候慢慢給你加載新內(nèi)容
  • 一般ajax請求比較有規(guī)律,請求參數(shù)一般為頁碼或者條數(shù),這樣的話可以通過循環(huán)語句批量生成請求參數(shù),實現(xiàn)全部爬取
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • HTTP基本原理 URI、URL、URN(Uninform Resource) URI(Identifier):統(tǒng)...
    GHope閱讀 2,298評論 2 26
  • 昨天,我們更多的討論了request的基礎API,讓我們對它有了基礎的認知。學會上一課程,我們已經(jīng)能寫點基本的爬蟲...
    阿爾卑斯山上的小灰兔閱讀 12,548評論 1 8
  • 2018年9月30日,(農(nóng)歷八月二十一) 00:29分,我的大兒子降生了! 老婆是9月29日晚6點17分被推進了產(chǎn)...
    f0ceed4f8c54閱讀 226評論 0 1
  • 這些日子,通過對焦點的初步了解,我發(fā)現(xiàn)我越來越喜歡焦點了。在各位老師的擾動下,我也開始了分享我的每天心得,希望...
    悠揚小徑閱讀 228評論 0 0
  • http://www.cae.cn/cae/html/files/2015-10/29/2015102910582...
    Zerat閱讀 257評論 0 0

友情鏈接更多精彩內(nèi)容