什么是爬虫(一文读懂爬虫)
這篇文章主要介紹什么是爬蟲,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
如果學(xué)會(huì)了python的基本語(yǔ)法,我認(rèn)為入門爬蟲是很容易的。
1:什么是爬蟲
爬蟲(spider,又網(wǎng)絡(luò)爬蟲),是指向網(wǎng)站/網(wǎng)絡(luò)發(fā)起請(qǐng)求,獲取資源后分析并提取有用數(shù)據(jù)的程序。
從技術(shù)層面來(lái)說(shuō)就是 通過程序模擬瀏覽器請(qǐng)求站點(diǎn)的行為,把站點(diǎn)返回的HTML代碼/JSON數(shù)據(jù)/二進(jìn)制數(shù)據(jù)(圖片、視頻) 爬到本地,進(jìn)而提取自己需要的數(shù)據(jù),存放起來(lái)使用。
2: 爬蟲的基本思路
通過URL或者文件獲取網(wǎng)頁(yè),
分析要爬取的目標(biāo)內(nèi)容所在的位置
用元素選擇器快速提取(Raw)目標(biāo)內(nèi)容
處理提取出來(lái)的目標(biāo)內(nèi)容 ( 通常整理合成一個(gè) Json)
存儲(chǔ)處理好的目標(biāo)內(nèi)容 (比如放到 MongoDB 之類的數(shù)據(jù)庫(kù),或者寫進(jìn)文件里。)
robots協(xié)議:
網(wǎng)站通過 Robots 協(xié)議告訴搜索引擎哪些頁(yè)面可以抓取,哪些頁(yè)面不能抓取,但它僅僅是道德層面上的約束。
爬蟲的用途:
1、12306搶票
2、短信轟炸
3、網(wǎng)絡(luò)投票
4、監(jiān)控?cái)?shù)據(jù)
5、下載圖片、小說(shuō)、視頻、音樂等
Http和Https:
發(fā)送請(qǐng)求,獲取響應(yīng)的過程其實(shí)就是發(fā)送Http或者Https請(qǐng)求和響應(yīng)的過程。
HTTP
超文本傳輸協(xié)議
默認(rèn)端口號(hào):80
HTTPS
HTTP + SSL(安全套接字層),即帶有安全套接字層的超本文傳輸協(xié)議。
默認(rèn)端口號(hào):443
作用:在傳輸過程中對(duì)數(shù)據(jù)進(jìn)行加密,防止被竄改。
區(qū)別:http因不需要加密,所以性能更高,但安全性差。https安全性高,但是占用服務(wù)器資源。
但是Https是未來(lái)的主流,比如小程序、ios、android客戶端的接口都需要Https接口支持。
Http請(qǐng)求報(bào)文:
常見請(qǐng)求頭:
Http狀態(tài)碼
常見的 HTTP 狀態(tài)碼:
200 - 請(qǐng)求成功
301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它 URL
404 - 請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在
500 - 內(nèi)部服務(wù)器錯(cuò)誤
Chrome瀏覽器請(qǐng)求分析
分析流程圖:
以上都是爬蟲的預(yù)備知識(shí),掌握了之后就可以寫代碼去爬取我們想要爬的網(wǎng)站了。Python提供了許多網(wǎng)絡(luò)請(qǐng)求的庫(kù),比如Requests、urllib等,這里只說(shuō)一下requests庫(kù)。
Requests庫(kù)
安裝:
pip(3)installrequests
基本使用:
#導(dǎo)入模塊 importrequests #定義請(qǐng)求地址 url='http://www.baidu.com' #發(fā)送GET請(qǐng)求獲取響應(yīng) response=requests.get(url) #獲取響應(yīng)的html內(nèi)容 html=response.text
response常用屬性:
response.text 返回響應(yīng)內(nèi)容,響應(yīng)內(nèi)容為 str 類型
respones.content 返回響應(yīng)內(nèi)容,響應(yīng)內(nèi)容為 bytes 類型
response.status_code 返回響應(yīng)狀態(tài)碼
response.request.headers 返回請(qǐng)求頭
response.headers 返回響應(yīng)頭
response.cookies 返回響應(yīng)的 RequestsCookieJar 對(duì)象
#獲取字節(jié)數(shù)據(jù)
content=response.content
#轉(zhuǎn)換成字符串類型
html=content.decode('utf-8')
自定義請(qǐng)求頭
#導(dǎo)入模塊
importrequests
#定義請(qǐng)求地址
url='http://www.baidu.com'
#定義自定義請(qǐng)求頭
headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_14_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.
3578.98Safari/537.36"
}
#發(fā)送自定義請(qǐng)求頭
response=requests.get(url,headers=headers)
#獲取響應(yīng)的html內(nèi)容
html=response.text
發(fā)送Get請(qǐng)求
#導(dǎo)入模塊
importrequests
#定義請(qǐng)求地址
url='http://www.baidu.com/s'
#定義自定義請(qǐng)求頭
headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_14_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.
3578.98Safari/537.36"
}
#定義GET請(qǐng)求參數(shù)
params={
"kw":"hello"
}
#使用GET請(qǐng)求參數(shù)發(fā)送請(qǐng)求
response=requests.get(url,headers=headers,params=params)
#獲取響應(yīng)的html內(nèi)容
html=response.text
發(fā)送POST請(qǐng)求
#導(dǎo)入模塊
importrequests
#定義請(qǐng)求地址
url='http://www.baidu.com'
#定義自定義請(qǐng)求頭
headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_14_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.
3578.98Safari/537.36"
}
#定義post請(qǐng)求參數(shù)
data={
"kw":"hello"
}
#使用POST請(qǐng)求參數(shù)發(fā)送請(qǐng)求
response=requests.post(url,headers=headers,data=data)
#獲取響應(yīng)的html內(nèi)容
html=response.text
使用代理
為什么使用代理:1、讓服務(wù)器以為請(qǐng)求是從多個(gè)客戶端發(fā)出的。2、防止暴露我們的真實(shí)地址。
使用方法
#導(dǎo)入模塊
importrequests
#定義請(qǐng)求地址
url='http://www.baidu.com'
#定義自定義請(qǐng)求頭
headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_14_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.
3578.98Safari/537.36"
}
#定義代理服務(wù)器
proxies={
"http":"http://IP地址:端口號(hào)",
"https":"https://IP地址:端口號(hào)"
}
#使用POST請(qǐng)求參數(shù)發(fā)送請(qǐng)求
response=requests.get(url,headers=headers,proxies=proxies)
#獲取響應(yīng)的html內(nèi)容
html=response.text
請(qǐng)求中攜帶cookie
作用:有些網(wǎng)站需要登錄,這時(shí)候cookie就是記錄了你的用戶信息。
方式:
直接在自定義請(qǐng)求頭中攜帶
通過請(qǐng)求參數(shù)攜帶cookie
#導(dǎo)入模塊
importrequests
#定義請(qǐng)求地址
url='http://www.baidu.com'
#定義自定義請(qǐng)求頭
headers={
"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_14_0)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.
3578.98Safari/537.36"
#方式一:直接在請(qǐng)求頭中攜帶Cookie內(nèi)容
"Cookie":"Cookie值"
}
#方式二:定義cookies值
cookies={
"xx":"yy"
}
#使用POST請(qǐng)求參數(shù)發(fā)送請(qǐng)求
response=requests.get(url,headers=headers,cookies=cookies)
#獲取響應(yīng)的html內(nèi)容
html=response.text
數(shù)據(jù)提取
作用:從爬蟲獲取的數(shù)據(jù)中提取出我們想要的數(shù)據(jù)。
方式:
json模塊提取
xpath提取
正則提取
beautifulsoup
json
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式
json.loads json字符串 轉(zhuǎn) Python數(shù)據(jù)類型
json.dumps Python數(shù)據(jù)類型 轉(zhuǎn) json字符串
json.load json文件 轉(zhuǎn) Python數(shù)據(jù)類型
json.dump Python數(shù)據(jù)類型 轉(zhuǎn) json文件
ensure_ascii=False 實(shí)現(xiàn)讓中文寫入的時(shí)候保持為中文
indent=空格數(shù) 通過空格的數(shù)量進(jìn)行縮緊
xpath
XPath 全稱: XML Path Language,是一門在 XML 文檔中查找信息的語(yǔ)言。XPath 可用來(lái)在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷。
安裝:
pip(3)installlxml
常用規(guī)則
正則
Python中通過正則表達(dá)對(duì)字符串進(jìn)行匹配是,可以使用re模塊。
#導(dǎo)入re模塊 importre #使用match方法進(jìn)行匹配操作 result=re.match(正則表達(dá)式,要匹配的字符串) #如果上一步匹配到數(shù)據(jù)的話,可以使用group方法來(lái)提取數(shù)據(jù) result.group()
常見語(yǔ)法
總結(jié)
以上是生活随笔為你收集整理的什么是爬虫(一文读懂爬虫)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 漫画:程序员相亲?哈哈哈哈哈哈
- 下一篇: 杀戮尖塔有安卓版么