python 爬蟲網頁登陸

datehoer發表於2020-11-30

相信各位在寫python爬蟲的時候會在爬取網站時遇到一些登陸的問題,比如說登陸時遇到輸入驗證碼比如說登入時遇到圖片拖拽等驗證,如何解決這類問題呢?一般有兩種方案。

使用cookie登陸

我們可以通過使用cookies登陸,首先獲取瀏覽器的cookie,然後利用requests 庫直接登陸cookie,伺服器就會認為你是一個真實登陸使用者,所以就會返回給你一個已登陸的狀態,這個方法是很好用的,基本上絕大部分的需要驗證碼登入的網站都可以通過cookie登入來解決,

 #! -*- encoding:utf-8 -*-
    import requests
    import random
    import requests.adapters

    # 要訪問的目標頁面
    targetUrlList = [
        "https://httpbin.org/ip",
        "https://httpbin.org/headers",
        "https://httpbin.org/user-agent",
    ]

    # 代理伺服器
    proxyHost = "t.16yun.cn"
    proxyPort = "31111"

    # 代理隧道驗證資訊
    proxyUser = "username"
    proxyPass = "password"

    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
        "host": proxyHost,
        "port": proxyPort,
        "user": proxyUser,
        "pass": proxyPass,
    }

    # 設定 http和https訪問都是用HTTP代理
    proxies = {
        "http": proxyMeta,
        "https": proxyMeta,
    }

    # 訪問三次網站,使用相同的Session(keep-alive),均能夠保持相同的外網IP
    s = requests.session()

    # 設定cookie
    cookie_dict = {"JSESSION":"123456789"}
    cookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
    s.cookies = cookies

    for i in range(3):
        for url in targetUrlList:
            r = s.get(url, proxies=proxies)
            print r.text
若存在驗證碼,此時採用resp**e = requests_session.post(url=url_login, data=data)是不行的,做法應該如下:

resp**e_captcha = requests_session.get(url=url_login, cookies=cookies)
resp**e1 = requests.get(url_login) # 未登陸
resp**e2 = requests_session.get(url_login) # 已登陸,因為之前拿到了Resp**e Cookie!
resp**e3 = requests_session.get(url_results) # 已登陸,因為之前拿到了Resp**e Cookie!

模擬登陸
這裡不得不說一句老話,前人種樹,後人乘涼,當時我想爬一下知乎鹽選的文章,但是卡在了登陸這塊,沒想到搜尋下來發現了一個模擬登陸的庫,非常好用,不過本著好東西不分享防和諧的原則,就不在這裡說了。
具體思路也就是通過requests來進行模擬登陸,然後返回一下驗證碼,之後傳入驗證碼即可登陸成功了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章