python爬蟲登錄
A. 怎樣用python設計一個爬蟲模擬登陸知乎
兩種方法:
1.帶cookielib和urllib2
import urllib2
import urllib
import cookielib
def login():
email = raw_input("請輸入用戶名:")
pwd = raw_input("請輸入密碼:") data={"email":email,"password":pwd}
post_data=urllib.urlencode(data) cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))headers
={"User-agent":"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1"}website =
raw_input('請輸入網址:')req=urllib2.Request(website,post_data,headers)content=opener.open(req)print
content.read()
2.使用selenium
import selenium import webdriver
browser=webdriver.Firefox()
browser.get("Url")
browser.find_element_by_id(" ").sendkey("username")
browser.find_element_by_id(" ").sendkey("pass")
browser.find_element_by_id(" ").click()
其實我這個最簡單了,用的python3,requests, 只需要驗證一次,就會保存cookies,下次登錄使用cookies登錄。
第一步、打開首頁獲取_xref值,驗證圖片 第二步、輸入賬號密碼 第三步、看是否需要驗證、要則下載驗證碼圖片,手動輸入
第四步、判斷是否登錄成功、登錄成功後獲取頁面值。
B. python爬蟲登錄知乎後怎樣爬取數據
模擬登錄
很多網站,比如知乎、微博、豆瓣,都需要登錄之後,才能瀏覽某些內容。所以想要爬取這類網站,必須先模擬登錄。比較簡單的方式是利用這個網站的 cookie。cookie 相當於是一個密碼箱,裡面儲存了用戶在該網站的基本信息。在一次登錄之後,網站會記住你的信息,把它放到cookie里,方便下次自動登錄。所以,要爬取這類網站的策略是:先進行一次手動登錄,獲取cookie,然後再次登錄時,調用上一次登錄得到的cookie,實現自動登錄。
動態爬取
在爬取知乎某個問題的時候,需要將滑動滑鼠滾輪到底部,以顯示新的回答。靜態的爬取方法無法做到這一點,可以引入selenium庫來解決這一問題。selenium庫模擬人瀏覽網站、進行操作,簡單易懂。
C. python 爬蟲如何實現cnki 的自動ip登錄
自己做個代理伺服器。例如618爬蟲代理,再指向次一級代理。或者是直接讓爬蟲通過http proxy的參數設置去先把一個代理。 代理池通常是租來的,或者是掃描出來的。掃描出來的往往大部分都不可用。 爬蟲的實現有幾百種方案。通常建議直接從SCRAPY入手。
D. python爬蟲模擬登陸網站
你可以結合使用requests和selenium這兩個python模塊來實現半自動化模擬登錄。
#-*-coding:utf-8-*-
importtime
importrequests
fromrequests.sessionsimportcookiejar_from_dict
fromseleniumimportwebdriver
LOGIN_URL='http://www.cofool.com/'
driver=webdriver.Firefox()
driver.get(LOGIN_URL)
time.sleep(30)
cookies={}
forcookieindriver.get_cookies():
cookies[cookie['name']]=cookie['value']
driver.quit()
printcookies
#cookies={}
headers={
'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64;rv:24.0)Gecko/20100101Firefox/24.0',
'Accept':'*/*',
'Connection':'keep-alive',
}
cookies=cookiejar_from_dict(cookies)
rep=requests.get('http://www2.cofool.com/stock/mainzjgp.asp',cookies=cookies,headers=headers)
printrep.text
如果解決了您的問題請採納!
如果未解決請繼續追問
E. 怎樣用Python設計一個爬蟲模擬登陸知乎
給你一個例子,可以看看:
import requests
import time
import json
import os
import re
import sys
import subprocess
from bs4 import BeautifulSoup as BS
class ZhiHuClient(object):
"""連接知乎的工具類,維護一個Session
2015.11.11
用法:
client = ZhiHuClient()
# 第一次使用時需要調用此方法登錄一次,生成cookie文件
# 以後可以跳過這一步
client.login("username", "password")
# 用這個session進行其他網路操作,詳見requests庫
session = client.getSession()
"""
# 網址參數是賬號類型
TYPE_PHONE_NUM = "phone_num"
TYPE_EMAIL = "email"
loginURL = r"http://www.hu.com/login/{0}"
homeURL = r"http://www.hu.com"
captchaURL = r"http://www.hu.com/captcha.gif"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Host": "www.hu.com",
"Upgrade-Insecure-Requests": "1",
}
captchaFile = os.path.join(sys.path[0], "captcha.gif")
cookieFile = os.path.join(sys.path[0], "cookie")
def __init__(self):
os.chdir(sys.path[0]) # 設置腳本所在目錄為當前工作目錄
self.__session = requests.Session()
self.__session.headers = self.headers # 用self調用類變數是防止將來類改名
# 若已經有 cookie 則直接登錄
self.__cookie = self.__loadCookie()
if self.__cookie:
print("檢測到cookie文件,直接使用cookie登錄")
self.__session.cookies.update(self.__cookie)
soup = BS(self.open(r"http://www.hu.com/").text, "html.parser")
print("已登陸賬號: %s" % soup.find("span", class_="name").getText())
else:
print("沒有找到cookie文件,請調用login方法登錄一次!")
# 登錄
def login(self, username, password):
"""
驗證碼錯誤返回:
{'errcode': 1991829, 'r': 1, 'data': {'captcha': '請提交正確的驗證碼 :('}, 'msg': '請提交正確的驗證碼 :('}
登錄成功返回:
{'r': 0, 'msg': '登陸成功'}
"""
self.__username = username
self.__password = password
self.__loginURL = self.loginURL.format(self.__getUsernameType())
# 隨便開個網頁,獲取登陸所需的_xsrf
html = self.open(self.homeURL).text
soup = BS(html, "html.parser")
_xsrf = soup.find("input", {"name": "_xsrf"})["value"]
# 下載驗證碼圖片
while True:
captcha = self.open(self.captchaURL).content
with open(self.captchaFile, "wb") as output:
output.write(captcha)
# 人眼識別
print("=" * 50)
print("已打開驗證碼圖片,請識別!")
subprocess.call(self.captchaFile, shell=True)
captcha = input("請輸入驗證碼:")
os.remove(self.captchaFile)
# 發送POST請求
data = {
"_xsrf": _xsrf,
"password": self.__password,
"remember_me": "true",
self.__getUsernameType(): self.__username,
"captcha": captcha
}
res = self.__session.post(self.__loginURL, data=data)
print("=" * 50)
# print(res.text) # 輸出腳本信息,調試用
if res.json()["r"] == 0:
print("登錄成功")
self.__saveCookie()
break
else:
print("登錄失敗")
print("錯誤信息 --->", res.json()["msg"])
def __getUsernameType(self):
"""判斷用戶名類型
經測試,網頁的判斷規則是純數字為phone_num,其他為email
"""
if self.__username.isdigit():
return self.TYPE_PHONE_NUM
return self.TYPE_EMAIL
def __saveCookie(self):
"""cookies 序列化到文件
即把dict對象轉化成字元串保存
"""
with open(self.cookieFile, "w") as output:
cookies = self.__session.cookies.get_dict()
json.mp(cookies, output)
print("=" * 50)
print("已在同目錄下生成cookie文件:", self.cookieFile)
def __loadCookie(self):
"""讀取cookie文件,返回反序列化後的dict對象,沒有則返回None"""
if os.path.exists(self.cookieFile):
print("=" * 50)
with open(self.cookieFile, "r") as f:
cookie = json.load(f)
return cookie
return None
def open(self, url, delay=0, timeout=10):
"""打開網頁,返回Response對象"""
if delay:
time.sleep(delay)
return self.__session.get(url, timeout=timeout)
def getSession(self):
return self.__session
if __name__ == '__main__':
client = ZhiHuClient()
# 第一次使用時需要調用此方法登錄一次,生成cookie文件
# 以後可以跳過這一步
# client.login("username", "password")
# 用這個session進行其他網路操作,詳見requests庫
session = client.getSession()
F. Python爬蟲模擬登陸
你首先要了解登錄的過程是什麼
先要利用頭來模擬偽裝成瀏覽器訪問網站
post是把數據發送給網站後台,get就相反(一般是這種情況)
把post的數據也做成一樣的樣式
訪問網站,如果是200,則表示成功了
最後你可以使用bs4之類的,根據正則匹配獲取相關的數據或者下載保存到本地
G. python 爬蟲怎麼模擬登錄
首先抓包查看登錄過程,找出登錄驗證方法,有的是登錄介面返回token,將token置於頭部,有的是靠cookie驗證
之後使用requests包模擬登錄過程
req = requests.post(url=登錄介面, data=參數, headers=請求頭)
token的話獲取req.content自己截出來
cookie的話使用req.cookies
在之後的過程中,如需要cookie
req = requests.post(url=數據介面, data=參數, headers=請求頭, cookies=剛才的cookie)
H. 怎麼用python爬蟲實現自動登錄電信chinanet的無線認證平台
前幾天女朋友跟我說,她在一個素材網站上下載東西,積分總是不夠用,積分是怎麼來的呢,是每天登錄網站簽到獲得的,當然也能購買,她不想去買,因為偶爾才會用一次,但是每到用的時候就發現積分不夠,又記不得每天去簽到,所以就有了這個糾結的事情。怎麼辦呢,想辦法唄,於是我就用python寫了個小爬蟲,每天去自動幫她簽到掙積分。廢話不多說,下面就講講代碼。
我這里用的是python3.4,使用python2.x的朋友如果有需要請繞道查看別的文章。
工具:Fiddler
首先下載安裝Fiddler,這個工具是用來監聽網路請求,有助於你分析請求鏈接和參數。
I. python爬蟲網站的登錄url怎麼找
抓取網頁所有url的簡單Python爬蟲源碼,只用到了一個Python標准庫urllib模塊,沒有用BeautifulSoup第三方庫。python 多線程爬蟲是一個很實用的工具。
Python爬蟲源碼發,如下:
import urllib
content = urllib.urlopen('http://www.iplaypython.com/').read()
s1=0
while s1>=0:
begin = content.find(r'<a',s1) m1="content.find(r'" href=",begin)
m2 = content.find(r">',m1)
s1 = m2
if(begin<=0):
break
elif(content[m1:m2].find(r" ")!=-1):
m2 = content[m1:m2].find(r' ')
url = content[m1+6:m1+m2-1]
print url
elif m2>=0:
url = content[m1+6:m2-1]
print url
print "end."
</a',s1)>
J. python爬蟲模擬登錄是什麼意思
有些網站需要登錄後才能爬取所需要的信息,此時可以設計爬蟲進行模擬登錄,原理是利用瀏覽器cookie。
一、瀏覽器訪問伺服器的過程:
(1)瀏覽器(客戶端)向Web伺服器發出一個HTTP請求(Http request);
(2)Web伺服器收到請求,發回響應信息(Http Response);
(3)瀏覽器解析內容呈現給用戶。
二、利用Fiddler查看瀏覽器行為信息:
Http請求消息:
(1)起始行:包括請求方法、請求的資源、HTTP協議的版本號
這里GET請求沒有消息主體,因此消息頭後的空白行中沒有其他數據。
(2)消息頭:包含各種屬性
(3)消息頭結束後的空白行
(4)可選的消息體:包含數據
Http響應消息:
(1)起始行:包括HTTP協議版本,http狀態碼和狀態
(2)消息頭:包含各種屬性
(3)消息體:包含數據
可以發現,信息里不僅有帳號(email)和密碼(password),其實還有_xsrf(具體作用往後看)和remember_me(登錄界面的「記住我」)兩個值。
那麼,在python爬蟲中將這些信息同樣發送,就可以模擬登錄。
在發送的信息里出現了一個項:_xsrf,值為
這個項其實是在訪問知乎登錄網頁https://www.hu.com/#signin時,網頁發送過來的信息,在瀏覽器源碼中可見:
所以需要先從登錄網址https://www.hu.com/#signin獲取這個_xsrf的值,
並連同帳號、密碼等信息再POST到真正接收請求的http://www.hu.com/login/email網址。
(2)獲取_xsrf的值:
爬取登錄網址https://www.hu.com/#signin,從內容中獲取_xsrf的值。
正則表達式。
(3)發送請求:
xsrf = 獲取的_xsrf的值
data = {"email":"xxx","password":"xxx","_xsrf":xsrf}
login = s.post(loginURL, data = data, headers = headers)
loginURL:是真正POST到的網址,不一定等同於登錄頁面的網址;
(4)爬取登錄後的網頁:
response = s.get(getURL, cookies = login.cookies, headers = headers)
getURL:要爬取的登陸後的網頁;
login.cookies:登陸時獲取的cookie信息,存儲在login中。
(5)輸出內容:
print response.content
五、具體代碼:
[python]view plain
#-*-coding:utf-8-*-
#author:Simon
#updatetime:2016年3月17日17:35:35
#功能:爬蟲之模擬登錄,urllib和requests都用了...
importurllib
importurllib2
importrequests
importre
headers={'User-Agent':'Mozilla/5.0(WindowsNT6.2)AppleWebKit/535.11(KHTML,likeGecko)Chrome/17.0.963.12Safari/535.11'}
defget_xsrf():
firstURL="http://www.hu.com/#signin"
request=urllib2.Request(firstURL,headers=headers)
response=urllib2.urlopen(request)
content=response.read()
pattern=re.compile(r'name="_xsrf"value="(.*?)"/>',re.S)
_xsrf=re.findall(pattern,content)
return_xsrf[0]
deflogin(par1):
s=requests.session()
afterURL="https://www.hu.com/explore"#想要爬取的登錄後的頁面
loginURL="http://www.hu.com/login/email"#POST發送到的網址
login=s.post(loginURL,data=par1,headers=headers)#發送登錄信息,返回響應信息(包含cookie)
response=s.get(afterURL,cookies=login.cookies,headers=headers)#獲得登陸後的響應信息,使用之前的cookie
returnresponse.content
xsrf=get_xsrf()
print"_xsrf的值是:"+xsrf
data={"email":"xxx","password":"xxx","_xsrf":xsrf}
printlogin(data)
六、補充:
用知乎網做完試驗,發現這里好像並不需要發送_xsrf這個值。
不過有的網站在登陸時確實需要發送類似這樣的一個值,可以用上述方法。