爬蟲專案實戰(一)
大綱:
一、爬蟲介紹
二、網路請求requests
1、requests庫的基本使用
2、GET&POST
檢視電腦當前的python版本在cmd
中輸入命令:python -V
如果電腦中有兩個python環境,例如想在python3中下載時,使用命令:pip3 install requests 即可
接下來以爬取古詩文網為例https://www.gushiwen.org/
開啟古詩文網址,按F12,檢視原始碼
而之前程式碼中顯示是由python程式碼的爬蟲程式訪問的。
注:python的第三方庫均可在https://pypi.org中下載
小插曲(一)—解決bug
摘錄自https://blog.csdn.net/greatpresident/article/details/8209712?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
此時,程式報錯,UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa9’ in position 57096: illegal multibyte sequence(UnicodeEncodeError: ‘gbk’編解碼器不能在57096位置編碼字元’\xa9’:非法多位元組序列)大致是編碼出了問題
使用Python寫檔案的時候,或者將網路資料流寫入到本地檔案的時候,大部分情況下會遇到:UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position … 這個問題。 網路上有很多類似的檔案講述如何解決這個問題,但是無非就是encode,decode相關的,這是導致該問題出現的真正原因嗎?不是的。 很多時候,我們使用了decode和encode,試遍了各種編碼,utf8,utf-8,gbk,gb2312等等,該有的編碼都試遍了,可是編譯的時候仍然出現: UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xa0’ in position XXX。 崩潰了。
在windows下面編寫python指令碼,編碼問題很嚴重。
將網路資料流寫入檔案時時,我們會遇到幾個編碼:
1: #encoding=‘XXX’ 這裡(也就是python檔案第一行的內容)的編碼是指該python指令碼檔案本身的編碼,無關緊要。只要XXX和檔案本身的編碼相同就行了。 比如notepad++ "格式"選單裡面裡可以設定各種編碼,這時需要保證該選單裡設定的編碼和encoding XXX相同就行了,不同的話會報錯
2:網路資料流的編碼 比如獲取網頁,那麼網路資料流的編碼就是網頁的編碼。需要使用decode解碼成unicode編碼。
3:目標檔案的編碼 要將網路資料流的編碼寫入到新檔案,那麼我麼需要指定新檔案的編碼。寫檔案程式碼如:
f.write(txt)
那麼txt是一個字串,它是通過decode解碼過的字串。關鍵點就要來了:目標檔案的編碼是導致標題所指問題的罪魁禍首。如果我們開啟一個檔案:
f = open(“out.html”,“w”)
在windows下面,新檔案的預設編碼是gbk,這樣的話,python直譯器會用gbk編碼去解析我們的網路資料流txt,然而txt此時已經是decode過的unicode編碼,這樣的話就會導致解析不了,出現上述問題。 解決的辦法就是,改變目標檔案的編碼:
f = open(“out.html”,“w”,encoding=‘utf-8’)
問題解決
定義請求頭:
因為網站檢測到是爬蟲程式訪問,直接拒絕
小插曲(二)–其他偽裝瀏覽器的User-Agent寫法(前五種就夠用了)
摘錄自https://www.cnblogs.com/zrmw/p/9332801.html
-
Chrome
Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1 -
Firefox
Win7:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0 -
Safari
Win7:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50 -
Opera
Win7:Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50 -
IE
Win7+ie9:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)
Win7+ie8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)
WinXP+ie8:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)
WinXP+ie7:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)
WinXP+ie6:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
- 傲遊
傲遊3.1.7在Win7+ie9,高速模式:
Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12
傲遊3.1.7在Win7+ie9,IE核心相容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
- 搜狗
搜狗3.0在Win7+ie9,IE核心相容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)
搜狗3.0在Win7+ie9,高速模式:
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0
-
360
360瀏覽器3.0在Win7+ie9:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) -
QQ瀏覽器
QQ瀏覽器6.9(11079)在Win7+ie9,極速模式:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201
QQ瀏覽器6.9(11079)在Win7+ie9,IE核心相容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201
- 阿雲瀏覽器
阿雲瀏覽器1.3.0.1724 Beta(編譯日期2011-12-05)在Win7+ie9:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
post請求方式:
ajax可以做到不重新整理不載入 直接傳送訊息,是前端的一門技術。
import requests
#定義請求的url
url = 'https://fanyi.baidu.com/sug'
#定義請求頭資訊
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
#post傳送的資料
# data_v = input("please enter the word:")
data = {'kw':'你好'}
#傳送請求
res = requests.post(url=url,headers=headers,data=data)
#接受返回的資料
# print(res.status_code)
# print(res.json())
code = res.status_code
if code == 200:
print('請求成功')
data = res.json()
if data['errno'] == 0:
print('響應成功')
k = data['data'][0]['k']
v = data['data'][0]['v'].split(';')[-2]
print(k,'====',v)
4、requests處理cookie資訊
什麼是cookie?有什麼作用?
http請求是無狀態的請求協議,不會記住使用者的狀態和資訊,也不清楚使用者在這之前訪問過什麼,因為網站需要記錄使用者是否登陸時,就需要在使用者登入後,就需要把使用者的資訊記錄在當前使用者的瀏覽器中,記錄的內容就是cookie,使用者使用當前的瀏覽器繼續訪問這個伺服器時,會主動攜帶這個網站設定的cookie資訊來確認使用者的資訊。
cookie會在瀏覽器中記錄資訊,並在訪問時攜帶此資訊
1)瀏覽器更換或刪除cookie後,資訊被刪除
2)cookie在瀏覽器中記錄的資訊是不安全的,因為不能夠記錄敏感資訊
session:
是在伺服器端給每個使用者設定一個sessionID,並且把這個sessionID設定在使用者的瀏覽器中,也就是設定為cookie
在寫入的檔案中尋找之前使用者的訂單號
注:在pycharm總ctrl+F進行搜尋
顯示搜尋失敗,再搜尋login發現此時為登陸介面
原因是因為此時的python爬蟲程式沒有攜帶cookie資訊,沒有使用者資訊,因此無法登陸,
以上均為手動複製貼上過程,以下嘗試程式自動抓取資訊
使用requests中的session方法,最終請求的目標地址:http://www.rrys2019.com/user/user
登陸要請求的url :http://www.rrys2019.com/user/user
登陸要用的資料:
account: mier~
password: MIer112233…
remember: 1
url_back: http://www.rrys2019.com/user/user
import requests
#需要請求的目標地址
url = "http://www.rrys2019.com/user/user"
#登陸請求的地址
loginurl = "http://www.rrys2019.com/User/Login/ajaxLogin"
#定義請求頭資訊
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36'
}
#如果需要爬蟲程式主動記錄cookie並且攜帶cookie,那麼在使用requests之前session
#並且使用session方法返回的物件傳送請求即可
req = requests.session()
#登陸請求時的資料
data = {
"account":"mier~",
"password":"MIer112233..",
"remember":"1",
"url_back":"http://www.rrys2019.com/"
}
res = req.post(url=loginurl,headers=headers,data=data)
#判斷狀態
code = res.status_code
print(code)
if code == 200:
#發起新的請求,去獲取目標資料
res = req.get(url=url,headers=headers)
with open('rr.html','w',encoding='utf-8') as fp:
fp.write(res.text)
已經獲取到登陸需要的資料,如下:
相關文章
- 爬蟲實戰專案集合爬蟲
- 爬蟲實戰專案合集爬蟲
- Java 爬蟲專案實戰之爬蟲簡介Java爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- Python爬蟲入門學習實戰專案(一)Python爬蟲
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- python爬蟲實操專案_Python爬蟲開發與專案實戰 1.6 小結Python爬蟲
- 大資料爬蟲專案實戰教程大資料爬蟲
- Python網路爬蟲實戰小專案Python爬蟲
- Python網路爬蟲實戰專案大全!Python爬蟲
- 網路爬蟲——爬蟲實戰(一)爬蟲
- Go語言專案實戰:併發爬蟲Go爬蟲
- Python爬蟲開發與專案實戰pdfPython爬蟲
- Python爬蟲開發與專案實戰(2)Python爬蟲
- Python爬蟲開發與專案實戰(1)Python爬蟲
- Python靜態網頁爬蟲專案實戰Python網頁爬蟲
- 2019最新《網路爬蟲JAVA專案實戰》爬蟲Java
- Datawhale-爬蟲-Task7(實戰大專案)爬蟲
- 爬蟲實戰專案-公眾號:AI悅創爬蟲AI
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- 32個Python爬蟲實戰專案,滿足你的專案慌Python爬蟲
- python爬蟲初探--第一個python爬蟲專案Python爬蟲
- 爬蟲專案爬蟲
- Python爬蟲開發與專案實戰--分散式程式Python爬蟲分散式
- Python學習筆記——爬蟲之Scrapy專案實戰Python筆記爬蟲
- 精通Scrapy網路爬蟲【一】第一個爬蟲專案爬蟲
- 網路爬蟲——專案實戰(爬取糗事百科所有文章)爬蟲
- 【爬蟲】爬蟲專案推薦 / 思路爬蟲
- 從0到1完成nutch分散式爬蟲專案實戰分散式爬蟲
- Python爬蟲開發與專案實戰 4: HTML解析大法Python爬蟲HTML
- 最新《30小時搞定Python網路爬蟲專案實戰》Python爬蟲
- 爬蟲小專案爬蟲
- 爬蟲專案部署爬蟲
- 爬蟲實戰scrapy爬蟲
- Python 爬蟲實戰Python爬蟲
- 精通 Python 網路爬蟲:核心技術、框架與專案實戰Python爬蟲框架
- python書籍推薦-Python爬蟲開發與專案實戰Python爬蟲
- 資料分析專案(一)——爬蟲篇爬蟲