关闭

一个简单的不用cookie的人人网状态爬取的python爬虫,使用beautifulsoup

标签: pythonbeautifulsoup人人网爬虫cookie
939人阅读 评论(0) 收藏 举报
分类:

昨天晚上闲着无聊翻翻人人,想来过去几年一直用的人人,里面好多喜怒哀乐。正好最近在写爬虫,干脆把它都弄下来留着吧。于是开工。


爬取的是我自己的全部已经发过的状态。


先是,向所有人一样,百度了一下,有没有现成的解决方案,确实有不少,说要先登录,然后再保留cookie,然后再用什么正则表达式,好是麻烦。


然后登录人人,分析它的网页结构,还是挺麻烦的,状态的界面都是用ajax生成的,没法直接一页一个url地获取。


直到看见一篇,说可以登录3g.renren.com,果然机智,上去看了一下, 特别简单,每一页一个url。最关键的是,它url里面直接包含你的账号和加密之后的密码,通过url就能直接访问了,不用登陆,也不用什么cookie了。


举例:


你登陆之后,点击状态,就能得到这么一个url:


http://3g.renren.com/status/getdoing.do?curpage=5&id=你的账号+blabla 


其中,curpage就是当前页,这样,对于每个页,直接改curpage的号就行了。后面的内容是你的加密之后的密码等信息。


页面长成这个样子



使用beautifulsoup解析,很快就搞定了。


来,上代码:



#!/usr/bin/python
#-*-coding:utf-8-*-

__author__ = 'PrlNcE'


import urllib2, gzip, StringIO, re

import urllib
from bs4 import BeautifulSoup
from multiprocessing import Pool as ProcessPool
from multiprocessing.dummy import Pool as ThreadPool
from multiprocessing.queues import SimpleQueue as Queue
from multiprocessing import freeze_support
from multiprocessing import Manager
import time
import re
import sys
import MySQLdb
#import DBconnecter

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

#print sys.getdefaultencoding()


def download_html_page(page_num):
    try:
        timeout = 2
        url = 'http://3g.renren.com/status/getdoing.do?curpage=' + page_num +'&id=【blabla,自己补】

        response = urllib2.urlopen(url,timeout = timeout)
        html = response.read()

        #print html

        soup = BeautifulSoup(html,"html.parser")
        #print soup.head.title

        res = ''
        status_list = soup.find('div',class_ = 'list')
        for status in status_list:
            #print status.find('p',class_ = 'time').string
            #print status
            temp = (str)(status)
            temp = temp.split('<')
            
            #time是该状态发表的时间
            time = status.find('p',class_ = 'time')
            t_res = ''
            
            if time:
                t_res = time.string
                
            for i in temp:
                if not i:
                    continue
                    
                #下面的代码是寻找html语句中的你所发的内容的,也就是去掉所有<>内包含的标签等内容的    
                index = i.find('>')
                t = i[index+1:]
                if t.find('|')>-1:
                    break
                #print t
                t_res += t
                t_res.replace('\n','')
            #print t_res
            res += t_res + '\n'
        print res
        return res


    except Exception as e:
        print 'URL Request Error:', e





print 'Let us begin!'
print '你好'

res = ''
for i in range(1,1000):
    print i
    res += download_html_page(str(i))

mdir='D:\\renren_status.txt'
file=open(mdir,'w')
file.write(res)
file.close()




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:73066次
    • 积分:2517
    • 等级:
    • 排名:第15171名
    • 原创:187篇
    • 转载:4篇
    • 译文:0篇
    • 评论:9条
    最新评论