Python爬蟲基礎-01-帶有請求引數的爬蟲
在上一篇文章Python爬蟲入門中,Python爬蟲程式爬取了指定網頁的資訊,爬蟲發出的請求是一個固定的URL和部分請求資訊,並沒有請求引數,但是爬蟲工作過程中發出的請求一般都需要加上請求引數,以完成對指定內容的爬取
HTTP請求分為POST請求和GET請求,在Python爬蟲中,這兩種請求因其結構不同,所以新增請求引數的方式也不同,下面將分別介紹使用POST請求和GET請求的Python爬蟲
GET請求
使用GET請求的Python爬蟲比較簡單,由於GET請求的請求引數包含在URL地址中,所以只需要先確定請求引數,然後將請求引數拼接到URL中即可,即 URL + 請求引數
(字串拼接)
使用GET請求的Python爬蟲案例
首先,一個使用GET請求訪問網頁的例子。如下圖所示,使用百度,以“爬蟲”為關鍵字進行查詢,可以看到,位址列的URL為:https://www.baidu.com/s?word=爬蟲
。我們可以使用這個URL地址利用爬蟲爬取該網頁
我們寫一個可以使用和上面一樣的GET請求的Python爬蟲程式,需要用到urlllib2包
# coding=utf-8
import urllib2
url = "http://www.baidu.com/s"
word = {"wd":"爬蟲"}
# url首個分隔符是 ?
newurl = url + "?" + word
# 新增User-Agent,完善請求資訊
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
request = urllib2.Request(newurl, headers=headers)
response = urllib2.urlopen(request)
print response.read()
程式寫好後,直接執行會報錯,這是因為請求引數需要進行編碼轉換,在使用瀏覽器訪問時,這個轉換是瀏覽器自動完成的。但是在Python爬蟲程式中,這一步就需要程式設計師自己來完成了。編碼轉換需要使用urllib包
# coding=utf-8
import urllib #負責url編碼處理
import urllib2
url = "http://www.baidu.com/s"
word = {"wd":"爬蟲"}
# 將請求引數轉換成url編碼格式(字串)
word = urllib.urlencode(word)
# url首個分隔符是 ?
newurl = url + "?" + word
# 新增User-Agent,完善請求資訊
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
request = urllib2.Request(newurl, headers=headers)
response = urllib2.urlopen(request)
print response.read()
執行程式,控制檯列印的資訊如下,爬取成功
使用GET請求的Python爬蟲的應用
在使用Python爬蟲爬取一個有分頁的網站時,各個頁面的URL非常接近,唯一的不同就是頁碼數字不同,這是使用GET請求能非常簡單方便的將該網站的各個頁面爬取下來
如下圖,Python吧的第一頁的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=0
第二頁的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
第三頁的URL地址:http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=100
可以看出URL中只有pn引數在變化,它控制著到底訪問該吧的那一頁,發現了這個規律後,就可以通過一個迴圈,切換URL地址中的引數從而將整個貼吧中所有頁面的內容都爬取下來
# coding=utf-8
import urllib
import urllib2
url = "http://tieba.baidu.com/f?kw=python&ie=utf-8&pn="
i = 0
while i<1000:
i = i +50
newurl = url + i
# 新增User-Agent,完善請求資訊
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
request = urllib2.Request(newurl, headers=headers)
response = urllib2.urlopen(request)
print response.read()
POST請求
GET請求的請求引數是直接包含在URL中了,而POST請求的請求引數則不會出現在URL中,而是要經過單獨的封裝處理。所以,如果爬蟲需要使用POST請求,就不能直接通過 URL + 請求引數
字串拼接這種簡單粗暴的方式了
使用POST請求的Python爬蟲案例
訪問百度貼吧的請求是GET型別的,而訪問有道翻譯的請求則是POST型別的。如下圖所示,輸入我在學習,點選翻譯,位址列中的URL沒有變化,說明點選翻譯後傳送的請求是POST型別的,即無法再URL中看到引數
下面就是使用POST請求的Python爬蟲程式,通過一個formdata 字典作為引數,當呼叫urllib2.Request類時,使用三個引數,即urllib2.Request(url, data = data, headers = headers)
,Python爬蟲傳送POST請求,使用兩個引數urllib2.Request(newurl, headers=headers)
,Python爬蟲傳送GET請求
# coding=utf-8
import urllib
import urllib2
# POST請求的目標URL
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
# 新增User-Agent,完善請求資訊
headers={ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}
formdata = {
"type":"AUTO",
"i":"i love python",
"doctype":"json",
"xmlVersion":"1.8",
"keyfrom":"fanyi.web",
"ue":"UTF-8",
"action":"FY_BY_ENTER",
"typoResult":"true"
}
data = urllib.urlencode(formdata)
request = urllib2.Request(url, data = data, headers = headers)
response = urllib2.urlopen(request)
print response.read()
相關文章
- 【0基礎學爬蟲】爬蟲基礎之網路請求庫的使用爬蟲
- Python爬蟲教程-01-爬蟲介紹Python爬蟲
- python爬蟲請求頭Python爬蟲
- Python:基礎&爬蟲Python爬蟲
- 實用爬蟲-01-檢測爬蟲的 IP爬蟲
- Python分散式爬蟲(三) - 爬蟲基礎知識Python分散式爬蟲
- Python爬蟲之路-爬蟲基礎知識(理論)Python爬蟲
- Python爬蟲入門(2):爬蟲基礎瞭解Python爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- 爬蟲基礎爬蟲
- Python爬蟲(二)——傳送請求Python爬蟲
- python爬蟲基礎概念Python爬蟲
- python_爬蟲基礎Python爬蟲
- python網路爬蟲(9)構建基礎爬蟲思路Python爬蟲
- 爬蟲基礎篇爬蟲
- 爬蟲基礎---1爬蟲
- 爬蟲入門基礎-Python爬蟲Python
- 【0基礎學爬蟲】爬蟲基礎之資料儲存爬蟲
- 【0基礎學爬蟲】爬蟲基礎之檔案儲存爬蟲
- 爬蟲(1) - 爬蟲基礎入門理論篇爬蟲
- 爬蟲headers引數爬蟲Header
- Python爬蟲與Java爬蟲有何區別?Python爬蟲Java
- Python爬蟲開發與專案實戰——基礎爬蟲分析Python爬蟲
- 【python爬蟲】python爬蟲demoPython爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 爬蟲 | 非同步請求aiohttp模組爬蟲非同步AIHTTP
- Python爬蟲:爬取instagram,破解js加密引數Python爬蟲JS加密
- python爬蟲基礎之urllibPython爬蟲
- Python爬蟲基礎之seleniumPython爬蟲
- python 爬蟲基礎知識一Python爬蟲
- 爬蟲基礎知識爬蟲
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Pyppeteer 的使用爬蟲
- (python)爬蟲----八個專案帶你進入爬蟲的世界Python爬蟲
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Playwright 的使用爬蟲
- 【0基礎學爬蟲】爬蟲基礎之自動化工具 Selenium 的使用爬蟲
- 爬蟲快速入門——Get請求的使用爬蟲
- Java爬蟲與Python爬蟲的區別?Java爬蟲Python
- Python爬蟲可以幹什麼?Python爬蟲有什麼用?Python爬蟲