詳解python爬蟲系列之初識爬蟲
前言
我們這里主要是利用requests模塊和bs4模塊進行簡單的爬蟲的講解,讓大家可以對爬蟲有了初步的認(rèn)識,我們通過爬幾個簡單網(wǎng)站,讓大家循序漸進的掌握爬蟲的基礎(chǔ)知識,做網(wǎng)絡(luò)爬蟲還是需要基本的前端的知識的,下面我們進行我們的爬蟲講解
在進行實戰(zhàn)之前,我們先給大家看下爬蟲的一般討論,方便大家看懂下面的實例

一、爬汽車之家
汽車之家這個網(wǎng)站沒有做任何的防爬蟲的限制,所以最適合我們來練手
1、導(dǎo)入我們要用到的模塊
import requests from bs4 import BeautifulSoup
2、利用requests模塊偽造瀏覽器請求
# 通過代碼偽造瀏覽器請求 res = requests.get(https://www.autohome.com.cn/news/)
3、設(shè)置解碼的方式,python是utf-8,但是汽車之家是用gbk編碼的,所以這里要設(shè)置一下解碼的方式
# 設(shè)置解碼的方式 res.encoding = "gbk"
4、把請求返回的對象,傳遞一個bs4模塊,生成一個BeautifulSoup對象
soup = BeautifulSoup(res.text,"html.parser")
5、這樣,我們就可以使用BeautifulSoup給我們提供的方法,如下是查找一個div標(biāo)簽,且這個div標(biāo)簽的id屬性為auto-channel-lazyload-atricle
# find是找到相匹配的第一個標(biāo)簽
div = soup.find(name="div",attrs={"id":"auto-channel-lazyload-article"})
# 這個div是一個標(biāo)簽對象
6、findall方法,是超找符合條件的所有的標(biāo)簽,下面是在步驟5的div標(biāo)簽內(nèi)查找所有的li標(biāo)簽
li_list = div.find_all(name="li")
7、查找li標(biāo)簽中的不同條件的標(biāo)簽
li_list = div.find_all(name="li") for li in li_list: title = li.find(name="h3") neirong = li.find(name="p") href = li.find(name="a") img = li.find(name="img") if not title: continue
8、獲取標(biāo)簽的屬性
# print(title, title.text, sep="標(biāo)題-->") # print(neirong, neirong.text, sep="內(nèi)容-->") # print(href, href.attrs["href"], sep="超鏈接-->") # 獲取標(biāo)簽對接的屬性 # print(img.attrs["src"]) # ret = requests.get(img_src)
9、如果我們下載一個文件,則需要requests.get這個文件,然后調(diào)用這個文件對象的content方法
src = img.get("src")
img_src = src.lstrip("/")
file_name = img_src.split("/")[-1]
img_src = "://".join(["https",img_src])
print(file_name)
ret = requests.get(img_src)
with open(file_name,"wb") as f:
f.write(ret.content)
10、整體的代碼如下

二、爬抽屜
這里我們看下如何爬抽屜
1、首先抽屜有做防爬蟲的機制,我們在訪問的時候必須要加一個請求頭
# 實例1:爬取數(shù)據(jù),這個網(wǎng)址有做防爬蟲機制,所以需要帶一個請求頭信息,才能讓服務(wù)端以為我們是瀏覽器,不然服務(wù)端會把我們的請求當(dāng)做爬蟲行為進行攔截
# 設(shè)置一個請求頭
chouti = requests.get(url="https://dig.chouti.com/",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
})
2、這個請求網(wǎng)站會返回一個cookies,通過下面的方法獲取cookies
print(chouti.cookies.get_dict())
# {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'JSESSIONID': 'aaaNxWlWjLLKU9CGXDyNw'}
3、轉(zhuǎn)換頁面為一個BeautifulSoup對象
# 將頁面轉(zhuǎn)換成一個BeautifulSoup的對象,就可以使用BeautifulSoup的方法了
soup = BeautifulSoup(chouti.text,"html.parser")
news_list = soup.find_all(name="div",attrs={"class":"item"})
for news in news_list:
compont = news.find(name="div",attrs={"class":"part2"})
print(compont.get("share-title"))

4、下面我們看下如何登陸抽屜
首先我們先通過get方式訪問主頁
# 1、先查看首頁
r1 = requests.get(url="https://dig.chouti.com/",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
})
然后我們通過post方式進行登陸,
# 2、提交用戶名和密碼進行登陸
r2 = requests.post(url="https://dig.chouti.com/login",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
},
data={
"phone":"86139252938822",
"password":"admin",
"oneMonth":1
},
cookies=r1.cookies.get_dict()
)

最后登陸成功后,我們來實現(xiàn)一個點贊的操作,這里要注意
# 第二次登陸的時候把第一次返回的cookies帶上,這個是抽屜這個網(wǎng)站的套路,同樣這次登陸也會返回一個cookies,但是登陸這次返回的cookies其實是個迷惑我們的cookies,沒有用
# print(r2.text)
# 登陸失敗返回的信息:{"result":{"code":"21101", "message":"手機號或密碼錯誤", "data":{}}}
# 登陸成功返回的信息:{"result":{"code":"9999", "message":"", "data":{"complateReg":"0","destJid":"cdu_53218132468"}}}
# 如果登陸成功,通過下面的方法就可以把服務(wù)端返回的cookies拿到,以后在發(fā)請求,帶著cookies去就可以了
print(r2.cookies.get_dict())
# {'puid': 'b11ec95d3b515ae2677a01f6abd5b916', 'gpid': '01cff9a184bd427789429d1dd556f4d2'}
r3 = requests.post(url="https://dig.chouti.com/link/vote?linksId=25461201",
headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
},
# cookies=r2.cookies.get_dict(),
cookies=r1.cookies.get_dict(),
# 破解抽屜coookies套路
)
# 這次點贊,我們同樣帶的cookies是第一次登陸主頁返回的cookies,而不是登陸成功后返回的cookies
# print(r3.text)

爬抽屜所有的代碼如下
# 實例1:爬取數(shù)據(jù),這個網(wǎng)址有做防爬蟲機制,所以需要帶一個請求頭信息,才能讓服務(wù)端以為我們是瀏覽器,不然服務(wù)端會把我們的請求當(dāng)做爬蟲行為進行攔截
# 設(shè)置一個請求頭
chouti = requests.get(url="https://dig.chouti.com/",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
})
# print(chouti.text)
print(chouti.cookies.get_dict())
# {'gpsd': 'ab141f7a741144216429b6e901da5f34', 'JSESSIONID': 'aaaNxWlWjLLKU9CGXDyNw'}
# 將頁面轉(zhuǎn)換成一個BeautifulSoup的對象,就可以使用BeautifulSoup的方法了
soup = BeautifulSoup(chouti.text,"html.parser")
news_list = soup.find_all(name="div",attrs={"class":"item"})
for news in news_list:
compont = news.find(name="div",attrs={"class":"part2"})
print(compont.get("share-title"))
# 1、先查看首頁
r1 = requests.get(url="https://dig.chouti.com/",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
})
# r1.cookies.get_dict(),第一次訪問主頁,服務(wù)端就給返回了一個cookies
# 2、提交用戶名和密碼進行登陸
r2 = requests.post(url="https://dig.chouti.com/login",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
},
data={
"phone":"8613925293887",
"password":"admin123.",
"oneMonth":1
},
cookies=r1.cookies.get_dict()
)
# 第二次登陸的時候把第一次返回的cookies帶上,這個是抽屜這個網(wǎng)站的套路,同樣這次登陸也會返回一個cookies,但是登陸這次返回的cookies其實是個迷惑我們的cookies,沒有用
# print(r2.text)
# 登陸失敗返回的信息:{"result":{"code":"21101", "message":"手機號或密碼錯誤", "data":{}}}
# 登陸成功返回的信息:{"result":{"code":"9999", "message":"", "data":{"complateReg":"0","destJid":"cdu_53218132468"}}}
# 如果登陸成功,通過下面的方法就可以把服務(wù)端返回的cookies拿到,以后在發(fā)請求,帶著cookies去就可以了
print(r2.cookies.get_dict())
# {'puid': 'b11ec95d3b515ae2677a01f6abd5b916', 'gpid': '01cff9a184bd427789429d1dd556f4d2'}
r3 = requests.post(url="https://dig.chouti.com/link/vote?linksId=25461201",
headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
},
# cookies=r2.cookies.get_dict(),
cookies=r1.cookies.get_dict(),
# 破解抽屜coookies套路
)
# 這次點贊,我們同樣帶的cookies是第一次登陸主頁返回的cookies,而不是登陸成功后返回的cookies
# print(r3.text)
三、爬github
github的登陸是form表單做的,所以我們在登陸github的時候需要把cookies和crsf_token都帶上
1、訪問github的首頁
# 1、GET,訪問登陸頁面
r1 = requests.get(url="https://github.com/",
headers={
"user-agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
}
)
# print(r1.cookies.get_dict())
2、訪問登陸頁面,需要在隱藏的input標(biāo)簽中找到token,然后獲取到
r2 = requests.get(url="https://github.com/login",
headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
}
)
login_obj = BeautifulSoup(r2.text,"html.parser")
token = login_obj.find(name="form",attrs={"action":"/session"}).find(name="input",attrs={"name":"authenticity_token"}).get("value")

3、post方式訪問登陸頁面,攜帶上用戶名和密碼,token和cookies
# 2、發(fā)送post請求,發(fā)送用戶名和密碼,發(fā)送的數(shù)據(jù)要不僅有用戶名和密碼,還要帶上csrf token和cookie,瀏覽器發(fā)什么,我們就發(fā)什么
r3 = requests.post(url="https://github.com/session",
headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
},
data={
"login":"admin",
"password":"admin",
"authenticity_token":token
},
cookies=r2.cookies.get_dict()
)
4、以后就可以攜帶r3這個請求訪問的cookies進行登陸github后的操作了
obj = BeautifulSoup(r3.text,"html.parser")
# print(obj.find_all(name="img",attrs={"alt":"@admin"}))
# 3、發(fā)送get請求,訪問這個路徑:https://github.com/settings/profile
r4 = requests.get(url="https://github.com/settings/profile",
cookies=r3.cookies.get_dict()
)
print(r4.text)
爬github的所有的代碼如下

四、爬拉鉤網(wǎng)
最后我們來爬一下拉勾網(wǎng)
1、首先get方式訪問拉勾網(wǎng)的首頁
import requests
from bs4 import BeautifulSoup
# 如果遇到登陸的密碼被加密了有兩種解決辦法
# 1、獲取他的加密方式,然后手動破解
# 2、直接抓包把加密后的數(shù)據(jù)發(fā)過去就可以了
# 1、訪問登陸頁面
l1 = requests.get(url="https://passport.lagou.com/login/login.html",
headers={
"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
})
# print(l1.text)
2、登陸拉鉤網(wǎng),他的請求頭稍微有點特殊

data很簡單,我們直接抓包就可以拿到
主要是請求頭中的數(shù)據(jù)是怎么來的,下面這2個是在我們請求登陸的頁面中返回的,由于這2項在script標(biāo)簽中,我們只能通過正則表達式來匹配獲取



最后是爬拉勾網(wǎng)的所有的代碼

以上所述是小編給大家介紹的python爬蟲系列之初識爬蟲詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- 零基礎(chǔ)寫python爬蟲之神器正則表達式
- 零基礎(chǔ)寫python爬蟲之urllib2使用指南
- 零基礎(chǔ)寫python爬蟲之urllib2中的兩個重要概念:Openers和Handlers
- 零基礎(chǔ)寫python爬蟲之HTTP異常處理
- 零基礎(chǔ)寫python爬蟲之使用urllib2組件抓取網(wǎng)頁內(nèi)容
- 零基礎(chǔ)寫python爬蟲之爬蟲的定義及URL構(gòu)成
- 使用Python編寫簡單網(wǎng)絡(luò)爬蟲抓取視頻下載資源
- python利用beautifulSoup實現(xiàn)爬蟲
- python抓取網(wǎng)頁圖片示例(python爬蟲)
- Python爬蟲框架Scrapy安裝使用步驟
相關(guān)文章
使用IronPython把Python腳本集成到.NET程序中的教程
這篇文章主要介紹了使用IronPython把Python腳本集成到.NET程序中的教程,現(xiàn)在剛剛被微軟開源的.NET重新成為業(yè)界熱點、本文介紹了使Python和.NET交互的IronPython,需要的朋友可以參考下2015-03-03
windows系統(tǒng)Tensorflow2.x簡單安裝記錄(圖文)
這篇文章主要介紹了windows系統(tǒng)Tensorflow2.x簡單安裝記錄(圖文),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python實現(xiàn)處理Excel數(shù)據(jù)并生成只讀模式
這篇文章主要為大家詳細(xì)介紹了如何使用 Python 處理 Excel 數(shù)據(jù),并生成只讀模式的 Excel 文檔,文中的示例代碼簡潔易懂,有需要的小伙伴可以參考下2023-11-11
python使用tesseract實現(xiàn)字符識別功能
Tesseract 是一個開源的光學(xué)字符識別(OCR)引擎,它能夠識別多種語言的文本,可將掃描文檔、圖像中的文字提取并轉(zhuǎn)換為計算機可編輯的文本格式,本文給大家介紹了python使用tesseract實現(xiàn)字符識別功能,需要的朋友可以參考下2024-10-10
Python 實現(xiàn)異步調(diào)用函數(shù)的示例講解
今天小編就為大家分享一篇Python 實現(xiàn)異步調(diào)用函數(shù)的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
基于Python實現(xiàn)音樂節(jié)奏可視化效果
這篇文章主要為大家詳細(xì)介紹了如何基于Python語言實現(xiàn)音樂節(jié)奏可視化效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06

