注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

spider百度文章爬虫姊妹版-----批量修改空间容  

2012-08-08 16:51:05|  分类: Web技术-Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一说明:这段代码就是批量的修改空间中的文章内空信息。

二代码:


#coding:utf-8
import urllib2,urllib,re,os
import cookielib,time

'''
    百度爬虫类
    @author:FC_LAMP
'''
class SpiderBaiDu:

    #变量
    sqlit = None
    cur   = None
    baseurl = 'http://hi.baidu.com/new/'
    total  = 0

    header = {'User-Agent':'Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2'}
    
    #处理单引号
    def qutoSin(self,string):
        return string.replace("'","")
    
    
    #登陆百度空间
    '''
      user 为用户名
      pwd  为password
    '''
    def LoginBaiDu(self,user,pwd):
        
        #设置
        cookie = cookielib.CookieJar()
        cookieProc = urllib2.HTTPCookieProcessor(cookie)
        opener = urllib2.build_opener(cookieProc)
        urllib2.install_opener(opener)

        #请求
        post = {
            'username':user,
            'password':pwd,
            'tpl':'mn',
            'u':'http://www.baidu.com/',
            'psp_tt':0,
            'mem_pass':'on'
            }
        post = urllib.urlencode(post)
        
        req = urllib2.Request(
            url='https://passport.baidu.com/?login',
            data=post,
            headers = self.header
            )
        res = urllib2.urlopen(req).read(500)
        
        if 'passCookie' in res:
            flag = True
        else:
            flag = 'Login Fail:%s'%user
            
        return flag
    
        
    #分析页面
    '''
        url 为要分析页面的起始URL
        debug 当为True时,将会打印出调试信息
    '''
    def parse_html(self,url,debug=False):

        postedit_url = 'http://hi.baidu.com/pub/submit/modifytext';
        qbid = url.split('/')[-1]
        i = 0 #被禁言次数
        while True:
            c = urllib2.urlopen(url).read()
            if debug:
                #获取标题:
                title = re.compile(
                    '<title>(.*?)<\/title>',
                    re.S|re.I|re.U
                    )
                title = title.search(c)
                title = title.group(1)
                print title
                print url
                
            #获取下一篇连接
            nexturl = re.compile(
                    '<div.*?class="detail-nav-pre">.*?<a.*?href="(.*?)".*?hidefocus.*?><\/a>.*?<\/div>',
                     re.S|re.I|re.U
                )
            nexturl = nexturl.search(c)

            #获取token
            modify_url = 'http://hi.baidu.com/pub/show/modifytext?qbid='+qbid
            modify_c = urllib2.urlopen(url).read()
            qbtoken = re.compile(
                'window.qBdsToken="(.*?)";'
                )
            qbtoken = qbtoken.search(modify_c).group(1)
                
            #提交数据
            msg = '''
                <p>
                各位网友,实在很抱歉!百度空间的变化太大了,对于我这种喜欢传统BLOG的人来说实在是受不了(特别是垃圾评论)。
                所以决定搬家了,新地址是:http://fc-lamp.blog.163.com/。
                </p>
                <p>这篇文章的原标题是:%s。</p>
                <p>
                &nbsp;&nbsp;----------Author: FC_LAMP Time:%s
                </p>
            ''' %(title,time.strftime('%Y-%m-%d %H:%M:%S'))
            postdata={
                #'title':'愤怒离开:http://fc-lamp.blog.163.com/',
                'content':msg,
                'qbid':qbid,
                'bdstoken':qbtoken,
            }
            postdata = urllib.urlencode(postdata)
            req = urllib2.Request(
                url=postedit_url,
                data = postdata,
                headers = self.header
                )
            res = urllib2.urlopen(req).read()
            #换成dict
            res = eval(res)
            if res['errorMsg']!='':
                i+=1
                if i>=2:
                    print '哎~~又被禁言了,休息四分钟吧。'
                    time.sleep(240)
                else:
                    print '哎~~又被禁言了,休息两分钟吧。'
                    time.sleep(120)
                continue
            else:
                i=0
            
            #是否还有下一篇
            if nexturl==None:
                break
            url = self.qutoSin(nexturl.group(1).strip()).replace("\\",'')
            qbid = url.split('/')[-1]
            

#例子
st = time.time()
print('解析中......')
spider = SpiderBaiDu()
f = spider.LoginBaiDu('xxxx','xxxxx')


if f == True:
    #分析页面(这个是第一篇文章)
    url = 'http://hi.baidu.com/xxx/item/xxx'

    try:
        spider.parse_html(url,debug=True)
    except Exception as e:
        print('Error:',e)
else:
    print(f)

et = time.time()
c = et - st
print('程序运行耗时:%0.2f'%c)

spider百度文章爬虫姊妹版-----批量修改空间容 - fc_lamp - @fc_lamp
 

  评论这张
 
阅读(1096)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017