Python爬虫爬学校论坛民主湖-------------一个版面的搜索

       我们学校有个民主湖论坛,但是发现功能好不健全。比如你想看一个用户发的所有帖子是不可能的事,这可让很多想认识妹子的汉子,苦恼的不行。最近学Python爬虫程序,于是就写了个爬虫爬一下民主湖论坛,找到你想找的人的贴子。不过前提你必须先有他或她的一个帖子,然后把鼠标放到他的头像上,浏览器左下角有个UID值,记录下来,然后就可以在我们的爬虫中爬到你想要的人的所有帖子了。

      本文先做了一个很简陋的爬虫,不需要登录民主湖论坛,不过有些板块是没办法爬取的。另外现在只能指定爬特定模块,比如我们想在“黄桷树下”模块内找到他发的所有帖子,那么我们将鼠标移动到“黄桷树下”,浏览器左下角出现Fid值,本程序就通过该值爬相应的模块。

     程序中包含一个搜索函数,函数根据参数合成相应的URL地址,然后用Python模拟访问,抓取信息,然后通过正则表达式,获取每个帖子的作者,然后在和目标作者判断,如果匹配将该帖子的主题和连接保存到txt文件中。

# -*- coding: utf-8 -*-
"""
Created on Fri Mar 06 18:13:48 2015

@author: KyleHuang
@Address: Chongqing University
"""
import re  
import urllib2
 
def findAuthorArticle(authorId,Fid,pageStart,pageEnd):
     urlstr='http://www.cqumzh.cn/bbs/forumdisplay.php?fid='+str(Fid);
     matchstr='space.php?uid='+str(authorId)
     for i in range(pageStart,pageEnd):
         print u'爬虫爬到第'+str(i)+u'页'
         #合成URL路径
         urlstr2=urlstr+'&page='+str(i)
         #模拟请求网址
         request = urllib2.Request(urlstr2)
         request.add_header('User-Agent', 'fake-client')
         response = urllib2.urlopen(request)
         myPage =response.read()
         #匹配目标内容
         myItems=re.findall('<a title=(.*?)>(.*?)</a></span>.*?<td align="center" style="overflow:hidden"nowrap="nowrap">\r\n<cite>\r\n<a href="(.*?)">(.*?)</a>',myPage,re.S)
         for item in myItems:    
          #print item[1]+'authour='+item[2]
          #f.writelines(item[1]+'authour='+item[2]+'\n\r')
             str1=str(item[2])
             #找到目标作者
             if str1 == matchstr :
                 addr=getWebAdress(item[0])
                 info=item[0].replace('&','&')
                 print item[1]+','+info
                 #保存到文件
                 f.writelines(u'第'+str(i)+u'页,'+item[1]+','+info+'\n\r')
             

def getWebAdress(objStr):
             addr=re.findall('.*?href="(.*?)"',objStr,re.S)
             return addr[0]
if __name__=="__main__":
    #此处输入搜索需要的信息
    authorId=174384
    Fid=83
    start=1
    end=500
    print u"爬虫开始爬民主湖了 ......"
    f = open('id'+str(authorId)+'.txt','w+')  
    f.writelines(u"作者"+str(authorId)+u"\n\r") 
    findAuthorArticle(authorId,Fid,start,end)
    f.close()
本文为第一个爬虫程序比较简单。后续将实现全论坛无登陆的搜索,有登陆的搜索以及多线程加快搜索进度等功能。最后会尝试打包成EXE文件方便不会编程的想找某学校的人做朋友的人。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值