Python3簡單爬蟲-通過Cookie模擬登陸並通過下載連接批量下載

Python的爬蟲由於各種庫的支持,在初級爬蟲的方面十分方便。以下以批量下載網上文件爲例,介紹一下在Python3中如何實現爬蟲。(由於下載地址和鏈接屬於私人東西,所以文章中僅介紹方法,不提供真實的下載鏈接和地址,請知悉)

  • Cookie的簡單介紹
  • 如何獲取當前的Cookie
  • 詳細實現過程
  • 實現過程中遇到的問題

1.Cookie的簡單介紹

“Cookie”是小量信息,由網絡服務器發送出來以存儲在網絡瀏覽器上,從而下次這位獨一無二的訪客又回到該網絡服務器時,可從該瀏覽器讀回此信息。
個人粗略的理解是計算機上保存的用戶信息, 不過這個用戶信息是通過加密處理的。所以當我們拿到登陸網站的cookie後,沒有必要對其內容進行解讀,將整個cookie信息放入程序中就好。

2.如何獲取當前的Cookie

以Chrome爲例,在當前登陸的頁面點擊F12打開開發者模式,點擊轉換的Network頁面,然後刷新頁面,隨便在下方的文件框中點擊一個文件,在對應的右側信息框中找到Cookie的內容。

3.詳細實現過程

在Python3中我們使用Urllib庫中的Request來實現模擬登陸。首先在文件中導入用到的庫

from urllib import request
import pandas as pd

之後配置模擬瀏覽器的一些信息,其中包括獲取到的Cookie

cookie=‘’‘ ************************************************‘’‘

    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36',

        'Connection': 'keep-alive',

        'accept': 'application/json, text/plain, */*',

        'Cookie': cookie}

header就是一些瀏覽器信息,其中包括電腦的系統,瀏覽器的版本等,這些信息在查看cookie的那個頁面上,在輸入時可以按照頁面信息輸入。
一般下載鏈接在用戶未登陸的情況下是無法下載,或者下載後是空的文件,所以就需要模擬登陸來獲取下載的文件。
輸入對應的下載鏈接,由於上面已經記錄了cookie信息,這時要做的就是如何模擬登陸。

url='********************************'
wb = request.Request(url, headers=header)
f = request.urlopen(url=wb).read()
filename = 'tmp.xls'
open(filename, 'wb').write(f)  # 在寫文件時,要寫成bytes類型的文件‘wb’
df_tmp = pd.read_excel('tmp.xls')

由於我在爬取的時候,下載的文件打開是bytes類型的文件,所以這裏是使用臨時文件tmp.xls作爲中轉,並通過pandas讀取數據,然後做後續操作,如另存,上傳數據庫等等。

4.實現過程中遇到的問題

個人在實現過程中遇到的一些問題,分享出來以供大家參考

爲什麼不用Request庫

對Python瞭解的童鞋肯定會問爲什麼是Urllib而不是Request,因爲Request庫中沒有對下載鏈接文件的保存函數,由於下載下來的是bytes類型的文件,導致使用read()函數時,讀出來的是亂碼。在使用decode()函數時又會報錯,報錯原因查了半天半天資料也米有解決,所以放棄了。

爲什麼不適用Urllib.request.urlretrieve來保存文件?

由於需要使用urllib.request.request模擬登陸,urllib.request.urlretrieve無法讀取request後的信息只能讀取url,所以使用urllib.request.urlopen().read()和open().write()來寫入文件,並且open的類型是’wb’

爲什麼使用pandas在中間做中轉,而不是直接另存?

如果有需求直接另存到本地,可以將代碼中的pandas去掉,直接使用循環對下載鏈接進行拼接,獲得頁面或者網站中的每個下載鏈接,然後對filename也進行循環,使用open().write()來另存文件,這裏的filename需要使用絕對路徑來寫。而我的需求是上傳到數據庫中, 個人覺得pd.to_sql()比較好用,就使用了pandas做中轉。

是不是每個網站都可以這麼爬?

並不是,這要看網站的反爬策略的強弱了,如果是一些大網站的話,這種方法就顯得過於簡單。可以根據不同的網站情況修改對應的爬蟲策略。

總結

以上就是使用Python3進行簡單的爬蟲,基於各個工具庫使得簡單爬蟲很容易實現。以上只是基於下載做的示例,主要的問題其實是模擬登陸,在模擬登陸後,大家就可以舉一反三的實現其他的需求。希望我的分享可以給大家帶來幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章