V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sophie2805
V2EX  ›  Python

求助: python 自动登录挖财 bbs 后,回帖,提示:未登陆,求助求助求助啊!妹子第一次发帖

  •  
  •   sophie2805 · 2015-06-26 19:41:54 +08:00 · 3508 次点击
    这是一个创建于 3467 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #-*- coding:utf-8 -*-
    __author__ = 'Sophie2805'

    import urllib
    import urllib2
    import time
    import re
    import cookielib

    jar = cookielib.CookieJar()
    handler = urllib2.HTTPCookieProcessor(jar)
    opener = urllib2.build_opener(handler)
    params ={
    'user.account':'***',
    'user.pwd':'***'
    }
    headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0'}
    url = 'http://bbs.wacai.com/'#/forum-16056-1.html
    req = urllib2.Request(url, headers=headers)
    bbs_page = urllib2.urlopen(req,urllib.urlencode(params))
    bbs_html= bbs_page.read()
    cookie = bbs_page.info()['set-cookie']
    print cookie
    pattern_2 = 'name="formhash" value="' + '.+"'
    p_2 = re.compile(pattern_2)
    result_2 = p_2.findall(bbs_html)
    '''
    title = '签到有礼'+(time.strftime("%m.%d")+'0').strip('0')+'每天签到得铜钱,每人限回一次'
    pattern_1 = '<.+>'+title
    p_1 = re.compile(pattern_1)

    pattern_2 = 'name="formhash" value="' + '.+"'
    p_2 = re.compile(pattern_2)
    result_1 = p_1.findall(bbs_html)
    result_2 = p_2.findall(bbs_html)


    '''
    formhash = result_2[0][result_2[0].find('value="')+7:result_2[0].find('value="')+15]
    link_today = 'http://bbs.wacai.com/forum.php?mod=post&action=reply&fid=16056&tid=644887&extra=&replysubmit=yes&infloat=yes&handlekey=fastpost&inajax=1'#'http://bbs.wacai.com/'+ result[0][result[0].find('a href="')+8:result[0].find(' onclick=')-1]
    reply={
    'formhash':formhash,
    'message':'貌似是赠送到余额里面的'
    }
    h ={
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:38.0) Gecko/20100101 Firefox/38.0',
    'Referer':'http://bbs.wacai.com/thread-645253-1-1.html',
    'Host':'bbs.wacai.com',
    'Cookie': cookie

    }
    req_thread = urllib2.Request(link_today,headers=h)
    page = urllib2.urlopen(req_thread,urllib.urlencode(reply))
    print '~~~~~~'
    print page.info()['set-cookie']
    print '~~~~~'
    print page.read()
    17 条回复    2015-06-27 01:52:05 +08:00
    sophie2805
        1
    sophie2805  
    OP
       2015-06-26 19:58:03 +08:00   ❤️ 1
    irgil
        2
    irgil  
       2015-06-26 19:58:53 +08:00 via Android
    这跟你是不是妹子有什么关系
    hansnow
        3
    hansnow  
       2015-06-26 20:00:54 +08:00   ❤️ 1
    用requests.Session()试试
    hahasong
        4
    hahasong  
       2015-06-26 20:19:25 +08:00
    不爆照然并卵
    horizon
        5
    horizon  
       2015-06-26 20:21:39 +08:00
    @irgil 赞同,和你性别有什么关系
    cc7756789
        6
    cc7756789  
       2015-06-26 20:37:03 +08:00   ❤️ 1
    论坛是否有验证码?另外用request要简单很多,也容易判断哪里可能出错。
    sophie2805
        7
    sophie2805  
    OP
       2015-06-26 21:08:31 +08:00
    @hansnow 谢谢,requests确实简单很多,但是登陆成功后,我需要获取到页面源码,把里面的formhash找出来,我翻了很多API文档,没找到r = s.post(login_url,login_post_data) 怎么获取登陆成功后页面html源码
    sophie2805
        8
    sophie2805  
    OP
       2015-06-26 21:08:51 +08:00
    @cc7756789 谢谢,requests确实简单很多,但是登陆成功后,我需要获取到页面源码,把里面的formhash找出来,我翻了很多API文档,没找到r = s.post(login_url,login_post_data) 怎么获取登陆成功后页面html源码
    sophie2805
        9
    sophie2805  
    OP
       2015-06-26 21:39:52 +08:00
    @cc7756789 没有验证码,问题解决了,多谢
    mystryl
        10
    mystryl  
       2015-06-26 21:49:42 +08:00
    @sophie2805 http://wuchong.me/blog/2014/04/24/easy-web-scraping-with-python/ 我看这个帖子,研究两天写了第一个爬虫,无python基础。。就学过大学的C
    这两天停不下来写到第三个了,还整合了TelegramBot做推送,python真好玩!
    sophie2805
        11
    sophie2805  
    OP
       2015-06-26 21:58:59 +08:00
    @hansnow 试过了,登陆成功了,但是后面post回帖的时候,还是提示未登陆 = =#
    sophie2805
        12
    sophie2805  
    OP
       2015-06-26 21:59:13 +08:00
    @sophie2805 试过了,登陆成功了,但是后面post回帖的时候,还是提示未登陆 = =#
    sophie2805
        13
    sophie2805  
    OP
       2015-06-26 22:04:15 +08:00
    @hansnow requests.Session( )不是可以保持连接的吗

    https://gist.github.com/sophie2805/c2e77d61eed2bfdd7f3a

    8d41cd5f
    <?xml version="1.0" encoding="utf-8"?>
    <root><![CDATA[抱歉,您尚未登录,没有权限在该版块回帖<script type="text/javascript" reload="1">if(typeof errorhandle_fastpost=='function') {errorhandle_fastpost('抱歉,您尚未登录,没有权限在该版块回帖', {});}</script>]]></root>
    hansnow
        14
    hansnow  
       2015-06-26 23:57:30 +08:00   ❤️ 1
    @sophie2805 把header增加一些呢?尽量做到和浏览器发出的请求完全一样
    sophie2805
        15
    sophie2805  
    OP
       2015-06-27 00:15:28 +08:00
    @hansnow 试过了,还是提示未登陆,难道挖财这个bbs登陆后,在页面间跳转,sessionid会变?!
    crab
        16
    crab  
       2015-06-27 00:47:10 +08:00   ❤️ 1
    登录后成功后返回的数据<script type="text/javascript" src="。应该是JS没跳转导致,这边的路径你取出来,再去请求一次,就可以了。
    sophie2805
        17
    sophie2805  
    OP
       2015-06-27 01:52:05 +08:00
    @crab 原来如此,已经OK了!谢谢螃蟹兄。之前一直都没有在意登陆post之后的这两个get~~~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5505 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:59 · PVG 16:59 · LAX 00:59 · JFK 03:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.