人人网用户信息爬虫

一直想做一个项目,爬取各个社交网站上与我们学校有关的用户的各种信息,然后分析用户行为。由于人人网的爬虫比较简单,所以最先从人人网爬起。

import re                                 
import urllib2
import mechanize
import cookielib
import HTMLParser
from BeautifulSoup import BeautifulSoup

re库主要用来正则匹配,cookielib库用来设置cookie,BS库和HTMLParser库解析HTML,mezchanize库模拟浏览器行为,对于爬虫来说,这是个很方便的库。

首先创建br对象,模拟浏览器。

def creat_br(self):

    # 创建br对象
    br = mechanize.Browser()

    # 对br进行初始化设置,模拟浏览器
    br.set_handle_equiv(True)
    br.set_handle_redirect(True)
    br.set_handle_referer(True)
    br.set_handle_robots(False)
    br.set_handle_gzip(True)

    br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

    # 设置请求头的UA
    br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.11) Gecko/20100701 Firefox/3.5.11')]

    return br

接下来进行登录,利用mechanize登录十分方便,打开登录页面,选中POST Form,填上表单值后直接提交就可以了。

def login(self):

    br = self.creat_br()

    br.open(url)

    # 选中表单
    br.select_form(nr=0)         

    # 下面直接填入账号密码就行
    br.form['email'] = str(self.username)
    br.form['password'] = str(self.password)
    br.submit()

    return br

登录后需要按关键词搜索出特定的用户,然后将用户信息爬取下来。人人网每个用户都有一个特定的ID,我们只需要获取每个用户的ID就能根据ID访问他们的个人主页,然后抓取用户资料。

打开用户搜索结果的界面,打开火狐浏览器的firebug,抓取网络请求,刷新页面。成功抓取到用户列表的Request URL。br打开URL,用 BeautifulSoup对页面进行解析,通过寻找标签找到需要获取的内容。

需要注意的细节:

1.用户搜索结果的URL和用户列表的URL不是同一个,如果直接通过打开用户搜索结果的URL来爬取用户信息,爬取到的永远是第一页的用户,无法批量爬取;通过抓取请求得到的用户URL格式如下:

main_url = 'http://browse.renren.com/sAjax.do?ref_search=searchResult_People_Tab&ajax=1&q=KEY_WORDS&p=&s=0&u=842824237&act=search&sort=0&_rtk=e7362bbf&act=search&ajax=1&p=&q=KEY_WORDS&requestToken=460664165&s=0&ss=false&u=842824237&offset=10'

其中参数q为关键词(URL编码),参数offset为页数,改变offset即可批量爬取用户。

2.网页中汉字为16进制的unicode编码,需要进行转码。

3.人人网有反爬虫机制,只有登录后才能查看用户资料,且每浏览100位用户资料后会出现一次验证码。尝试过爬取100位用户后退出登录然后崇信登录,但仍然受限制。反爬虫是绑定用户的。目前还没有找到好的解决方法。

点击下载源码
密码: hu3e

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值