引言:有些時候,我們在使用爬蟲程式去爬取一些使用者相關資訊的資料(爬取張三「人人網」個人主頁資料)時,如果使用之前requests模組常規操作時,往往達不到我們想要的目的,因為沒有攜帶登入的cookie,所以爬去下來的並不是個人主頁資料,而是人人網首頁的資料,爬去下來可以使用瀏覽器進行開啟,可以看到是首頁的內容例如:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import
requests
if__name__ == "
__main__":
#張三人人網個人資訊頁面的url
url = '
'#偽裝ua,模擬瀏覽器
headers=
#傳送請求,獲取響應物件
response = requests.get(url=url,headers=headers)
#設定響應內容的編碼格式
response.encoding = '
utf-8'#
將響應內容寫入檔案
with open('
./renren.html
','w
') as fp:
fp.write(response.text)
cookie概念:
當使用者通過瀏覽器首次訪問乙個網域名稱時,訪問的web伺服器會給客戶端傳送資料,以保持web伺服器與客戶端之間的狀態保持,這些資料就是cookie。
cookie作用:我們在瀏覽器中,經常涉及到資料的交換,比如你登入郵箱,登入乙個頁面。我們經常會在此時設定30天內記住我,或者自動登入選項。那麼它們是怎麼記錄資訊的呢,答案就是今天的主角cookie了,cookie是由http伺服器設定的,儲存在瀏覽器中,但http協議是一種無狀態協議,在資料交換完畢後,伺服器端和客戶端的鏈結就會關閉,每次交換資料都需要建立新的鏈結。就像我們去超市買東西,沒有積分卡的情況下,我們買完東西之後,超市沒有我們的任何消費資訊,但我們辦了積分卡之後,超市就有了我們的消費資訊。cookie就像是積分卡,可以儲存積分,商品就是我們的資訊,超市的系統就像伺服器後台,http協議就是交易的過程。
- 經過cookie的相關介紹,其實你已經知道了為什麼上述案例中爬取到的不是張三個人資訊頁,而是登入頁面。那應該如何抓取到張三的個人資訊頁呢?
思路:1.我們需要使用爬蟲程式對人人網的登入時的請求進行一次抓取,獲取請求中的cookie資料
2.在使用個人資訊頁的url進行請求時,該請求需要攜帶 1 中的cookie,只有攜帶了cookie後,伺服器才可識別這次請求的使用者資訊,方可響應回指定的使用者資訊頁資料
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import
requests
if__name__ == "
__main__":
#登入請求的url(通過抓包工具獲取)
post_url = '
'#建立乙個session物件,該物件會自動將請求中的cookie進行儲存和攜帶
session =requests.session()
#偽裝ua
headers=
formdata =
#使用session傳送請求,目的是為了將session儲存該次請求中的cookie
session.post(url=post_url,data=formdata,headers=headers)
get_url = '
'#再次使用session進行請求的傳送,該次請求中已經攜帶了cookie
response = session.get(url=get_url,headers=headers)
#設定響應內容的編碼格式
response.encoding = '
utf-8'#
將響應內容寫入檔案
with open('
./renren.html
','w
') as fp:
fp.write(response.text)
- 什麼是**?
- 爬蟲中為什麼需要使用**?
一些**會有相應的反爬蟲措施,例如很多**會檢測某一段時間某個ip的訪問次數,如果訪問頻率太快以至於看起來不像正常訪客,它可能就會會禁止這個ip的訪問。所以我們需要設定一些**ip,每隔一段時間換乙個**ip,就算ip被禁止,依然可以換個ip繼續爬取。
- **的分類:
正向**:**客戶端獲取資料。正向**是為了保護客戶端防止被追究責任。
反向**:**伺服器提供資料。反向**是為了保護伺服器或負責負載均衡。
- 免費獲取****:
1. 西祠**
2. 快**
- **:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import
requests
import
random
if__name__ == "
__main__":
#不同瀏覽器的ua
header_list =[
#遨遊,
#火狐,
#谷歌]
#不同的**ip(該**ip可能已經失效,請自行從網上獲取)
proxy_list =[,]
#隨機獲取ua和**ip
header =random.choice(header_list)
proxy =random.choice(proxy_list)
url = '
'#引數3:設定**
response = requests.get(url=url,headers=header,proxies=proxy)
response.encoding = '
utf-8
'with open(
'daili.html
', 'wb'
) as fp:
fp.write(response.content)
#切換成原來的ip
requests.get(url, proxies=)
Python爬蟲 HTTP協議 Requests庫
http協議 http hypertext transfer protocol 即超文字傳輸協議。url是通過http協議訪問資源的internet路徑,乙個url對應乙個資料資源。http協議對資源的操作 requests庫提供了http所有的基本請求方式。官方介紹 requests庫的6個主要方...
python 爬蟲系列02 認識 requests
本系列所有文章基於 python3.5.2 requests 是基於 urllib 的三方模組,相比於 uillib,操作更簡潔,功能更強大,而且支援 python3 getimport requests r requests.get url print r.status code print r....
python小白學習記錄 爬蟲requests篇
一 引用庫 import requests 二 請求訪問url,網頁相應 res requests.get 網頁位址 三 表明返回內容 目前返回的response物件有四種屬性 status code 檢查請求是否成功 content 將資料轉換為二進位制資料 text 將資料轉換為字串型資料 en...