免費推薦:python影片教學
相信各位在寫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來進行類比登陸,然後回傳驗證碼,之後傳入驗證碼即可登陸成功了。
以上是python 爬蟲網頁登入的實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!