我找到了一种使用Python登录网站的方法。问题是,每隔一段时间,我就会断开连接并注销。我猜测会话已超时,但我不知道如何修复它。
我使用了Firefox的Live HTTP Headers附加组件,并将登录请求中的标头复制到我的程序中。
import urllib
import urllib2
import cookielib
data = urllib.urlencode({"inUserName":"MY EMAIL", "inUserPass":"MY PASSWORD"})
jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders.append(('User-agent', 'Mozilla/5.0'))
opener.addheaders.append(('Referer', 'http://www.locationary.com/'))
opener.addheaders.append(('Cookie','site_version=REGULAR; __utma=47547066.601656247.1344371114.1344602507.1344606239.16; __utmz=47547066.1344371114.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); nickname=jacob501; jforumUserId=1; locaCountry=1227; locaState=null; locaCity=Atlanta; PSESSIONID=533e2fb9fda008d5d16bfbdc9b9a6afed0e5ac54; Locacookie=enable; sortOrder=1; JSESSIONID=DE58AC8BC78D1DF20BF338E195336E58; __utmc=47547066; __utmb=47547066.6.10.1344606239'))
request = urllib2.Request("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction", data)
response = opener.open(request)
page = opener.open(url).read()
soup = BeautifulSoup(page)
我使用了cookielib
和urrlib
/ urllib2
。真正使它工作的cookie真的很长,但我真的不知道这一切意味着什么,我只是从附加组件中复制它。如果我的连接中断,我会进入浏览器并再次登录并从附加组件中获取新的cookie。就像我之前说过的那样,我猜它与会话或者sessionid有什么关系,但我不知道怎么做到这一点让我总是登录。
感谢。
有人可以告诉我为什么这是一个糟糕的问题,还是我只是愚蠢? -1为什么?
好!如果我没有保持登录,那么有没有办法让我的连接/ cookie无法正常工作?
除了自己去Firefox附加组件外,我不知道如何获取新的Cookie ...哈哈
好。我做了一个新的测试程序:
import urllib
import urllib2
import cookielib
import re
url = 'http://www.locationary.com/home/index2.jsp'
data = urllib.urlencode({"inUserName":"email", "inUserPass":"password"})
jar = cookielib.FileCookieJar("cookies")
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))
opener.addheaders.append(('User-agent', 'Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1'))
opener.addheaders.append(('Referer', 'http://www.locationary.com/'))
opener.addheaders.append(('Cookie','site_version=REGULAR; __utma=47547066.601656247.1344371114.1344612897.1344615635.18; __utmz=47547066.1344371114.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); nickname=jacob501; jforumUserId=1; locaCountry=1227; locaState=null; locaCity=Atlanta; PSESSIONID=533e2fb9fda008d5d16bfbdc9b9a6afed0e5ac54; Locacookie=enable; sortOrder=1; JSESSIONID=781FD0C497FB596954BB78B1323215F6; __utmc=47547066; __utmb=47547066.9.10.1344615635'))
request = urllib2.Request("https://www.locationary.com/index.jsp?ACTION_TOKEN=tile_loginBar_jsp$JspView$LoginAction", data)
response = opener.open(request)
page = opener.open(url).read()
print re.findall(r'<title>(.*)</title>', page)
h = response.info().headers
print h
输出:
['Home Page']
['Server: nginx/1.0.8\r\n', 'Date: Fri, 10 Aug 2012 16:50:47 GMT\r\n', 'Content-Type: text/html;charset=UTF-8\r\n', 'Transfer-Encoding: chunked\r\n', 'Connection: close\r\n', 'P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"\r\n']
答案 0 :(得分:2)
为什么不尝试使用requests
模块并查看是否会产生影响?
看看示例here;它非常容易使用,如果只是为了防止你在Python的其他可悲的HTTP库中意外地犯错误,内置的cookie jar可能会有所帮助。
答案 1 :(得分:1)
您可以使用selenium,使用firefox登录此网页。 selenium
from selenium import selenium
localport = 12345
## you create a socket proxy here listening on localport
## connecting to www.locationary.com:80
selenium = selenium("localhost", 4444,
"*firefox", "http://localhost:%i" % localport)
while 1:
# open the selenium side every 5 minutes
selenium.open("/home/index2.jsp")
selenium.wait_for_page_to_load("30000")
time.sleep(5 * 60) # seconds
要安装selenium,你需要python包和selenium服务器.jar文件来启动它。
因为firefox通过您的程序登录,您可以解析有效会话ID的流量。
有问题吗?