FaceBook数据采集——模拟登录

前言


本科的毕业设计有做facebook的数据采集工作。在做的过程中,发现网上现成的资料较少,所以将我的解决办法分享出来,希望大家一起讨论并提出宝贵意见。

Facebook数据采集可以通过调用API,但是API获取数据较为混乱,没法有效的将数据组织在一起,所以就放弃了这种办法,改为采用网络爬虫的方式,但是网络爬虫个也存在各种问题。

在临近毕业的两周,我尽量每两天更新一篇文章,讨论其中一个问题的解决办法。

今天讨论的是模拟登录问题。

总的来说,使用python模拟登陆有两大类方法,一种是发送请求数据包,模拟数据交互的过程;另一种办法是使用selenium包,模拟用户的手工操作。

数据交互的方法


数据交互的方法的代码量比较多,但是运行起来速度要比使用selenium包快的多,也更容易控制。但是网上有人说,FaceBook会时常变动登陆过程中需要post的值,所以没有办法长期使用固定的代码。据我观察,近一个月的时间内,FaceBook的登陆过程没有发生变化。。。所以,自己看着办吧。反而是使用selenium包的方法有着很大的不确定性,具体情况放在下面讨论。

Facebook的登陆主要有三步,过程如下:

step 1

进入https://www.facebook.com,获取set-cookies值fr,下一步需要post的值lsd、lgnrnd、lgnjs,这三个值在html中均放在input标签下,且type均为‘hidden’,如下:

<input type="hidden" name="lsd" value="AVpI6yeG" autocomplete="off" />
<input type="hidden" name="lgnrnd" value="171524_eEMy" />
<input type="hidden" id="lgnjs" name="lgnjs" value="n" /></span>

使用正则语句将value值提取出即可,Cookie值使用cookiejar存储即可,方便下一步的使用。代码如下:

def login_first_step(self):
        sent_url = 'https://www.facebook.com'
        request = urllib2.Request(url=sent_url,headers=self.facebook_header)
        content=self.opener.open(request)
        html = content.read()
        lsd=lgndim=lgnjs=lgnrnd=''

        # 查找lsd
        reg = r'<input type="hidden" name="lsd" value="([A-Za-z0-9]*)" autocomplete="off" />'
        m = re.compile(reg)
        search = re.search(m,html)
        if search:
            lsd = search.group(1)

        # 查找lgndim lgndim可能为空
        reg = r'<input type="hidden" autocomplete="off" name="lgndim" value="([A-Za-z0-9]*)"'
        m = re.compile(reg)
        search = re.search(m,html)
        if search:
            lgndim = search.group(1)

        # 查找lgnrnd
        reg = r'<input type="hidden" name="lgnrnd" value="([A-Za-z0-9]*_[A-Za-z0-9]*)" />'
        m = re.compile(reg)
        search = re.search(m,html)
        if search:
            lgnrnd = search.group(1)

        # 查找lgnjs
        reg = r'<input type="hidden" id="lgnjs" name="lgnjs" value="([A-Za-z0-9]*)" />'
        m = re.compile(reg)
        search = re.search(m,html)
        if search:
            lgnjs = search.group(1)
        
        #设置第二步中要post的值
        self.login_post_values = 'lsd='+lsd+'&email='+self.email+'&pass='+self.password+\
                                 '&persistent=&default_persistent=1&timezone=&lgndim=&lgnrnd=&#
  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值