日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

什么是爬虫(一文读懂爬虫)

發(fā)布時(shí)間:2023/12/19 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 什么是爬虫(一文读懂爬虫) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章主要介紹什么是爬蟲,文中介紹的非常詳細(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。