爬蟲(chóng)基本概念
爬蟲(chóng)的定義
- 網(wǎng)絡(luò)爬蟲(chóng)(被稱(chēng)為 網(wǎng)頁(yè)蜘蛛,網(wǎng)絡(luò)機(jī)器人 ),就是 模擬客戶(hù)端發(fā)送網(wǎng)絡(luò)請(qǐng)求 ,接收請(qǐng)求響應(yīng),一種按照一定的規(guī)則,自動(dòng)地抓取互聯(lián)網(wǎng)信息的程序
- 一般來(lái)說(shuō),只要瀏覽器上能做的事情,爬蟲(chóng)都可以做
**爬蟲(chóng)的分類(lèi)
**
- 通用爬蟲(chóng) :通常指搜索引擎的爬蟲(chóng)
- 聚集爬蟲(chóng) :針對(duì)特定網(wǎng)站或某些特定網(wǎng)頁(yè)的爬蟲(chóng)
ROBOTS協(xié)議
- Robots協(xié)議: 也叫robots.txt(統(tǒng)一小寫(xiě))是一種存放于網(wǎng)站根目錄下的ASCII編碼的文本文件,它通常告訴網(wǎng)絡(luò)搜索引擎的漫游器(又稱(chēng)網(wǎng)絡(luò)蜘蛛),此網(wǎng)站中的哪些內(nèi)容是不應(yīng)被搜索引擎的漫游器獲取的,哪些是可以被漫游器獲取的
- 如果將網(wǎng)站視為酒店里的一個(gè)房間,robots.txt就是主人在房間門(mén)口懸掛的“請(qǐng)勿打擾”或“歡迎打掃”的提示牌。這個(gè)文件告訴來(lái)訪的搜索引擎哪些房間可以進(jìn)入和參觀,哪些房間因?yàn)榇娣刨F重物品,或可能涉及住戶(hù)及訪客的隱私而不對(duì)搜索引擎開(kāi)放。但robots.txt不是命令,也不是防火墻,如同守門(mén)人無(wú)法阻止竊賊等惡意闖入者
舉例:
-
訪問(wèn)淘寶網(wǎng)的robots文件: https://www.taobao.com/robots.txt
* 很顯然淘寶不允許百度的機(jī)器人訪問(wèn)其網(wǎng)站下其所有的目錄
-
如果允許所有的鏈接訪問(wèn)應(yīng)該是:Allow:/
http和https的概念
-
http
- 超文本傳輸協(xié)議
- 默認(rèn)端口號(hào):80
-
https
- HTTP+SSL(安全套接字層)
- 默認(rèn)端口號(hào):443
-
**HTTPS比HTTP更安全,但是性能更低
**
URL的形式
- sheme://host[:port#]/path/.../[?query-string][#anchor]
Http常見(jiàn)請(qǐng)求頭
- Host (主機(jī)和端口號(hào))
- Connection(鏈接類(lèi)型)
- Upgrade-insecure-Requests(升級(jí)為https請(qǐng)求)
- User-Agent(瀏覽器名稱(chēng))
- Accept(傳輸文件類(lèi)型)
- Referer(頁(yè)面跳轉(zhuǎn)處)
- Accept-Encoding(文件編解碼格式)
- Cookie
- x-requested-with:XMLHttpRequest(是Ajax異步請(qǐng)求)
Http常見(jiàn)響應(yīng)碼
- 200:成功
- 302:臨時(shí)性重定向到新的url
- 404:請(qǐng)求的路徑找不到
- 500:服務(wù)器內(nèi)部錯(cuò)誤
rquests模塊
requests的官網(wǎng)
**示例:下載官網(wǎng)上的圖片
**
import requests
url="https://docs.python-requests.org/zh_CN/latest/_static/requests-sidebar.png"
response=requests.get(url)
# 響應(yīng)狀態(tài)碼為200,表示請(qǐng)求成功
if response.status_code==200:
# 生成圖片
with open("aa.png","wb") as f:
f.write(response.content)
response.text 和 response.content 的區(qū)別
- response.text
- 類(lèi)型:str
- 解碼類(lèi)型:根據(jù)http頭部對(duì)響應(yīng)的編碼作出有根據(jù)的推測(cè),推測(cè)的文本編碼
- 修改編碼的方法:response.encoding='gbk'
- response.content
- 類(lèi)型:bytes
- 解碼類(lèi)型:沒(méi)有指定
- 修改編碼的方法:response.content.decode('utf-8')
**requests請(qǐng)求帶header
**
- 主要是模擬瀏覽器,欺騙服務(wù)器,獲取和瀏覽器一致的內(nèi)容
- header的數(shù)據(jù)結(jié)構(gòu)是 字典
示例
import requests
respons=requests.get("http://www.baidu.com")
print(respons.request.headers)
# 設(shè)置header 模擬谷歌瀏覽器
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
respons2=requests.get("http://www.baidu.com",headers=headers)
print(respons2.request.headers)
獲取User-Agent的值
帶參數(shù)的requests請(qǐng)求
import requests
url="http://www.baidu.com/s?"
# 添加參數(shù)
params={
"wd":"hello"
}
# 方式一
respons=requests.get(url,params=params)
# 方式二
respons2=requests.get("http://www.baidu.com/s?wd={}".format("hello"))
print(respons.status_code)
print(respons.request.url)
print(respons2.status_code)
print(respons2.request.url)
requests發(fā)送post請(qǐng)求
- 語(yǔ)法
- response=requests.post("http://www.baidu.com/",data=data,headers=headers)
- data的數(shù)據(jù)結(jié)構(gòu)是 字典
- 示例
import requests
url="https://www.jisilu.cn/data/cbnew/cb_list/?___jsl=LST___t=1617719326771"
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
params={
"curr_iss_amt": 20
}
respons=requests.post(url,data=params,headers=headers)
print(respons.content.decode())
requests使用代理方式
- 使用代理的原因
- 讓服務(wù)器以為不是同一個(gè)客戶(hù)端請(qǐng)求
- 防止我們的真實(shí)地址被泄露,防止被追究
- 語(yǔ)法
- requetst.get("http://www.baidu.com",proxies=proxies)
- proxies的數(shù)據(jù)結(jié)構(gòu) 字典
- proxies={ "http":"http://12.33.34.54:8374","https":"https://12.33.34.54:8374" }
- 示例
import requests
url="http://www.baidu.com"
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
proxies={
"http": "175.42.158.211:9999"
}
respons=requests.post(url,proxies=proxies)
print(respons.status_code)
**cookie和session的區(qū)別
**
- cookie數(shù)據(jù)存放在客戶(hù)的瀏覽器上,session數(shù)據(jù)放在服務(wù)器上
- cookie不是很安全,別人可以分析存放在本地的cookie并進(jìn)行cookie欺騙
- session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上。當(dāng)訪問(wèn)增多會(huì)比較占用服務(wù)器性能
- 單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4k,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie
爬蟲(chóng)處理cookie和session
- 帶上cookie、session的好處
- 能夠請(qǐng)求到登錄之后的頁(yè)面
- 帶上cookie、session的壞處
- 一套cookie和session往往和一個(gè)用戶(hù)對(duì)應(yīng),請(qǐng)求太快,請(qǐng)求次數(shù)太多,容易被服務(wù)器識(shí)別為爬蟲(chóng)
- 如果不需要cookie的時(shí)候盡量不去使用cookie
**requests 處理cookies、session請(qǐng)求
**
- reqeusts 提供了一個(gè)session類(lèi),來(lái)實(shí)現(xiàn)客戶(hù)端和服務(wù)端的會(huì)話保持
- 使用方法
- 實(shí)例化一個(gè)session對(duì)象
- 讓session發(fā)送get或者post請(qǐng)求
- 語(yǔ)法
- session=requests.session()
- response=session.get(url,headers)
- 示例
import requests
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
}
data={
"email":"用戶(hù)名",
"password":"密碼"
}
session=requests.session()
# session發(fā)送post請(qǐng)求,cookie保存在其中
session.post("http://www.renren.com/PLogin.do",data=data,headers=headers)
# 使用session請(qǐng)求登錄后才能訪問(wèn)的頁(yè)面
r=session.get("http://www.renren.com/976564425",headers=headers)
print(r.content.decode())
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11189瀏覽量
103915 -
程序
+關(guān)注
關(guān)注
117文章
3797瀏覽量
81439 -
網(wǎng)絡(luò)爬蟲(chóng)
+關(guān)注
關(guān)注
1文章
52瀏覽量
8724
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Python數(shù)據(jù)爬蟲(chóng)學(xué)習(xí)內(nèi)容
Python爬蟲(chóng)與Web開(kāi)發(fā)庫(kù)盤(pán)點(diǎn)
0基礎(chǔ)入門(mén)Python爬蟲(chóng)實(shí)戰(zhàn)課
Python爬蟲(chóng)簡(jiǎn)介與軟件配置
python網(wǎng)絡(luò)爬蟲(chóng)概述
詳細(xì)用Python寫(xiě)網(wǎng)絡(luò)爬蟲(chóng)
![詳細(xì)用<b class='flag-5'>Python</b>寫(xiě)網(wǎng)絡(luò)<b class='flag-5'>爬蟲(chóng)</b>](https://file.elecfans.com/web2/M00/49/AD/pYYBAGKhvE2AOtVjAAA-YDBdfyo751.png)
完全自學(xué)指南Python爬蟲(chóng)BeautifulSoup詳解
![完全自學(xué)指南<b class='flag-5'>Python</b><b class='flag-5'>爬蟲(chóng)</b>BeautifulSoup詳解](https://file.elecfans.com/web2/M00/49/AD/pYYBAGKhvE2APneIAABN6u_-VRA412.png)
評(píng)論