python爬蟲之requests庫介紹 二

2022-02-25 22:09:02 字數 3077 閱讀 6928

引言:有些時候,我們在使用爬蟲程式去爬取一些使用者相關資訊的資料(爬取張三「人人網」個人主頁資料)時,如果使用之前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...