找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5017|回复: 7

[已解决] 爬虫 模拟登录问题

2

主题

18

帖子

18

积分

贫民

积分
18
random7 发表于 2017-2-27 11:21:22 | 显示全部楼层 |阅读模式
爬虫模拟登录我校教务网站,遇到问题,各位大神帮忙看看,先上代码为敬:
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import urllib2
  4. import urllib
  5. import httplib
  6. import cookielib
  7. from bs4 import BeautifulSoup


  8. cookie = cookielib.CookieJar()
  9. handler=urllib2.HTTPCookieProcessor(cookie)
  10. opener=urllib2.build_opener(handler)

  11. headers={
  12.         'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0',
  13.         'Referer':'http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fyjsxt.xidian.edu.cn%2Flogin.jsp',
  14.         'Host':'ids.xidian.edu.cn',
  15.         'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  16.         'Content-Type':'application/x-www-form-urlencoded'
  17. }
  18. #获取登录页面中hidden的可变的post数据
  19. url='http://yjsxt.xidian.edu.cn'
  20. request = urllib2.Request(url)
  21. res = urllib2.urlopen(request)
  22. login_res=res.read()
  23. soup=BeautifulSoup(login_res)
  24. lt=soup.find('input',{'type':'hidden','name':'lt'})['value']
  25. execution=soup.find('input',{'type':'hidden','name':'execution'})['value']
  26. #action=soup.find('form',{'id':'casLoginForm','class':'fm-v clearfix'})['action']

  27. print lt
  28. print execution
  29. #print action
  30. postdata=urllib.urlencode({
  31.         'username':'*****',
  32.         'password':'********',
  33.         'submit':'登录',
  34.         '_eventId':'submit',
  35.         'rmShown':'1',
  36.         'lt':lt,
  37.         'execution':execution
  38.         })
  39. #myurl='http://ids.xidian.edu.cn/authserver/login;jsessionid=json_id?service=http://yjsxt.xidian.edu.cn/login.jsp'


  40. myurl='http://ids.xidian.edu.cn/authserver/login'
  41. req=urllib2.Request(myurl,postdata,headers=headers)
  42. try:
  43.         result=opener.open(req)
  44.         #print result.geturl()
  45.         text=result.read()

  46.         #for item in cookie:
  47.         #        print item

  48.         result1=opener.open('http://yjsxt.xidian.edu.cn/student/index.jsp')
  49.         text1=result1.read()
  50. except Exception, e:
  51.         raise e

  52. f=open('gr.html','w')
  53. f.write(text)
  54. f1=open('gr1.html','w')
  55. f1.write(text1)

  56. f.close()
  57. f1.close()
复制代码
用httpFox查看登陆过程:

action为提交的url,里面含有jsessionid,不知道如何处理,和cookie当中的JSESSIONID值一样,两次提交都返回到了登录页面,没法进入本人主页,各位爬虫大大给点意见,谢谢!
QQ截图20170224193259.png
回复

使用道具 举报

0

主题

33

帖子

33

积分

贫民

积分
33
jackyspy 发表于 2017-3-3 11:34:21 | 显示全部楼层
所以我说用Fiddler等工具抓包,比较一下两者请求有何差异。这是比较方面的一个调试方法。

404肯定与重定向无关

你可以按照自己的思路用postman等工具构造请求,看返回结果。

说白了,这是一个与python无关的问题。肯定是请求数据和浏览器内有差异,问题就在于找到差异进行调整。
回复 支持 1 反对 0

使用道具 举报

2

主题

18

帖子

18

积分

贫民

积分
18
random7  楼主| 发表于 2017-2-28 21:17:02 | 显示全部楼层
正在学爬虫,大大们给点意见,谢谢!
回复 支持 反对

使用道具 举报

0

主题

33

帖子

33

积分

贫民

积分
33
jackyspy 发表于 2017-3-2 14:31:37 | 显示全部楼层
HTTPCookieProcessor 会自动处理cookie。建议用requests
代码设置代理为fiddler抓包看看有啥区别。
回复 支持 反对

使用道具 举报

2

主题

18

帖子

18

积分

贫民

积分
18
random7  楼主| 发表于 2017-3-2 18:45:27 | 显示全部楼层
jackyspy 发表于 2017-3-2 14:31
HTTPCookieProcessor 会自动处理cookie。建议用requests
代码设置代理为fiddler抓包看看有啥区别。 ...

谢谢!我试了下requests,先get获取cookies和隐藏数据,在post ,结果是404
关键那个登录的action 里面有个jsessionid不知道怎么处理,值应该是之前获取的cookies,但是requests结果是404
还有登录页面里面表单提交的hidden数据 和 在firefox的httpfox里面看两个是一样的
但是在chrome里面,页面源码的hidden数据和F12里面看到的提交的表单数据是不一样的,我反复试验了好几次。已不知所措,困扰我好几天了。。。。。
方便加qq交流下么
回复 支持 反对

使用道具 举报

0

主题

33

帖子

33

积分

贫民

积分
33
jackyspy 发表于 2017-3-3 08:41:52 | 显示全部楼层
大概明白你的意思了。
form action是动态的,带jsessionid等参数,而你post的地址不带这些,那肯定不一样。
用正则表达式或者BeautifulSoup4、lxml、pyquery等拿到action就ok。

QQ不方便,不好意思
回复 支持 反对

使用道具 举报

2

主题

18

帖子

18

积分

贫民

积分
18
random7  楼主| 发表于 2017-3-3 10:39:15 | 显示全部楼层
jackyspy 发表于 2017-3-3 08:41
大概明白你的意思了。
form action是动态的,带jsessionid等参数,而你post的地址不带这些,那肯定不一样。 ...

谢谢!我用了requests,第一次先get,获取cookies,再把cookies拆解出来用在了第二次post请求的headers里面以及post请求的参数里面,action也用了动态获取的,状态码还是404
httpfox里面有挺多重定向的,是不是那个的原因?
回复 支持 反对

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2017-3-6 17:24:29 | 显示全部楼层
jackyspy 发表于 2017-3-2 14:31
HTTPCookieProcessor 会自动处理cookie。建议用requests
代码设置代理为fiddler抓包看看有啥区别。 ...

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表