`
snoopy7713
  • 浏览: 1151610 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

百度文章爬虫(完整版)

阅读更多

一 代码

#coding:gb2312

import urllib2,urllib,re,os
import sqlite3,cookielib,time
'''
    百度爬虫类
    @author:FC_LAMP
'''
class SpiderBaiDu:
    #变量
    sqlit = None
    cur   = None
    baseurl = 'http://hi.baidu.com'
    total  = 0
    #处理单引号
    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)

        #请求
        header = {'User-Agent':'Mozilla/5.0 (Windows NT 5.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2'}
        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 = header
            )
        res = urllib2.urlopen(req).read(500)
        
        if 'passCookie' in res:
            flag = True
        else:
            flag = 'Login Fail:%s'%user
            
        return flag


    #创建数据库
    '''
        dbFile 为数据库文件
    '''
    def created_db(self,dbFile):
        #
        dbFile = dbFile.replace("\\","/")
        self.sqlit = sqlite3.connect(dbFile)
        self.cur = self.sqlit.cursor()
        sql = """
            CREATE TABLE IF NOT EXISTS `article`
            (
                 a_id char(24) PRIMARY KEY,
                 title varchar(255),
                 created_time datetime,
                 category varchar(255),
                 orgurl varchar(255),
                 content text
            )
            """
        self.cur.execute(sql)
        self.sqlit.commit()
         #注更多关于python数据库的操作: http://hi.baidu.com/fc_lamp/blog/item/3d48778a1f93d06a9e2fb4c3.html
        
        
    #分析页面
    '''
        url 为要分析页面的起始URL
        debug 当为True时,将会打印出调试信息
    '''
    def parse_html(self,url,debug=False):
        
        while True:
            c = urllib2.urlopen(url).read()
            
            #标题,时间
            #正则编义( 注意后面的修饰 )
            p = re.compile(
                    r'<div.*?id="?m_blog"?.*?<div.*?class="?tit"?>(.*?)<\/div>.*?<div.*?class="?date"?>(.*?)<\/div>',
                    re.S|re.I
                    )
            m = p.search(c)
            if m==None:
                break
            title = m.group(1).strip()
            date  = m.group(2).strip()
            date  = date.split(' ')
            date  = date[0]+' '+date[1]
            
             #内容
            s = re.compile(
                    r'<div\s*?id="?blog_text"?\s*?class="?cnt"?\s*?>(.*?)<\/div>',
                    re.S|re.I
                )
            m = s.search(c)
         
            content = m.group(1).strip()

            #类别
            s = re.compile(
                    '类别:(.*?)<\/a>',
                    re.S|re.I|re.U
                )
            m = s.search(c)
            category = m.group(1).strip()

            #源链接
            orgurl = re.compile(
                    'myref.*?=.*?encodeURIComponent\("(.*?)"\)',
                    re.S|re.I|re.U
                )
            orgurl = orgurl.search(c)
            orgurl = orgurl.group(1).strip()
            aid = os.path.split(orgurl)
            aid = aid[1].split('%2E')[0]
            
            #注意正则最后一个)手动加转义符\,原因参看: http://hi.baidu.com/fc_lamp/blog/item/1e8bab1f258c58e31bd5769e.html


            #通过元组
            sql = 'insert into `article`(a_id,title,created_time,category,orgurl,content)'
            values = "values('%s','%s','%s','%s','%s','%s')"%(aid,self.qutoSin(title),date,self.qutoSin(category),orgurl,self.qutoSin(content))
            sql+=values
            
            #插入数据库
            self.cur.execute(sql)
            self.sqlit.commit()
            self.total +=1

            #下一篇
            nexturl = re.compile(
                    'var\s*?post\s*?=\s*?\[true,\'.*?\',\'.*?\',(.*?)]', #注意这里最后一个]没手动加转义符\
                     re.S|re.I|re.U
                )
            nexturl = nexturl.search(c)
            if nexturl==None:
                break
            nexturl = self.qutoSin(nexturl.group(1).strip()).replace("\\",'')
            nexturl = self.baseurl+nexturl
            url = nexturl
            #输出调试信息
            if debug:
                print(title)
                print(date)
                print('nextUrl:'+url+'\n')
           #睡上一秒

           time.sleep(1)  

 

二 例子

我们可以单独把SpiderBaiDu()类放一个模块,在使用时就很方便,下面这个例子是一个不登陆 爬取的例子。

#coding:gb2312
import spider,time#导入模块

if __name__ == '__main__':

    st = time.time()
    print('解析中......')

    spider = spider.SpiderBaiDu()

   #若要登陆加上:spider. LoginBaiDu(xxxx,xxxxx)

    spider.created_db(r"D:\test2.db3")
    url = 'http://hi.baidu.com/fc_lamp/xxxxxxx.html'#起始URL
    try:
        spider.parse_html(url,debug=True)
    except Exception as e:
        print('Error:',e)

    et = time.time()
    c = et - st
    print('程序运行耗时:%0.2fs'%c)
    print('总共爬取了 %d 篇文章'%spider.total)

 

三 结果

1 过程:

2 数据文件:

  

 

#参考资料
#关于python里正则使用 参看 1 http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
#                        2 http://hi.baidu.com/fc_lamp/blog/item/1e8bab1f258c58e31bd5769e.html

#关于数据库操作,参看 http://hi.baidu.com/fc_lamp/blog/item/3d48778a1f93d06a9e2fb4c3.html

#关于cookie登陆问题,参看 http://hi.baidu.com/fc_lamp/blog/item/2d947745fc31cf9fb2b7dc0a.html

#关于 python 异常处理,参看 http://hi.baidu.com/fc_lamp/blog/item/8a07f31e3e5c56dca7866992.html

#关于保留小数位问题:请参看 http://hi.baidu.com/fc_lamp/blog/item/09555100745c3eda267fb554.html

#Python 登陆163邮箱,并获取通讯录 http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html

 

ps :爬虫慎用~~~

分享到:
评论

相关推荐

    FindImg_javaFx_文章内容分词_抓取网络图片_百度图库_分词_

    在IT行业中,开发一款应用程序,如...以上就是“FindImg_javaFx”项目中涉及的主要技术点,通过这些技术,一个完整的文本处理和图像搜索应用得以实现,帮助用户自动从文章内容中提取关键词并搜索相关网络图片。

    ajax培训视频完整版,用于就业培训的视频,由于文件过大,用百度网盘保存,让你快速学习ajax

    这个"ajax培训视频完整版"显然是针对想要进入IT行业或者提升自己Ajax技能的人群设计的,特别是对于那些寻求就业培训的学员。 **Ajax的核心概念** 1. **异步通信**:Ajax的核心特性是异步,即在用户与页面交互时,...

    前端学生作业毕设实训素材-最新升级仿百度新闻文章门户模板.rar

    这个压缩包文件“前端学生作业毕设实训素材-最新升级仿百度新闻文章门户模板.rar”包含了一套完整的前端应用源码,适用于学生进行毕业设计学习。这个模板是仿照百度新闻文章门户设计的,旨在帮助学生掌握前端开发...

    免费伪原创工具,发文章软件,发博客软件

    搜索引擎如百度和Google有自己独特的爬虫技术和分词算法,它们会评估网页内容的原创性、质量和相关性。使用伪原创工具,可以增加文章的“新颖性”,使其在搜索结果中获得更好的展示位置,从而吸引更多的流量。 “本...

    baidu_photo_spider:爬取百度图片

    【标签】"附件源码"和"文章源码"提示我们这个项目包含了实际的代码文件,可能是一个完整的Python项目,包括主程序文件和其他辅助模块。在"baidu_photo_spider-main"目录下,我们可能找到如`spider.py`这样的主程序,...

    老男孩Python自动化开发12期完整版[含作业代码课件]

    通过以上对“老男孩Python自动化开发12期完整版[含作业代码课件]”的教学资料进行的知识点梳理,我们可以看出这套课程覆盖了Python自动化开发领域的多个方面,不仅包括了语言基础、核心技术和高级主题,还包含了丰富...

    千博百度主动推送工具 v1.1

    千博百度主动推送工具还支持定期上传Sitemap,使得网站管理员能够定期向百度提交网站的完整链接列表。这样做不仅方便了搜索引擎理解网站的架构,还能确保所有页面都得到充分的索引,特别是对于那些更新频率较低或者...

    搜索引擎语法大全【完整汇总版】

    本篇文章将详细阐述搜索引擎语法大全,特别是针对百度搜索引擎的一些高级搜索技巧。 首先,我们要理解搜索引擎的基本工作原理。搜索引擎通过爬虫技术抓取互联网上的网页,然后进行索引,当我们输入关键词时,它会...

    经典完整版SEO网站优化专项方案书.docx

    3. 设置robots.txt和sitemap.xml文件,引导搜索引擎爬虫。 4. 创建404错误页面,返回正确的HTTP状态码。 5. 增加高质量友谊链接,每天不超过3个。 6. 进行稳定的外链建设,提高网站权威性。 7. 实施面包屑导航,优化...

    baiduwenku-download.zip

    针对这一问题,一款名为“baiduwenku-download.zip”的工具应运而生,它能够帮助用户绕过限制,免费下载百度文库中的所有文章,无论是否是VIP专享。 首先,我们来看核心文件“baiduwenku-download.exe”,这是一个...

    商剑网络信息万能采集器(商剑采集-完全免费!!!)

    由于采用了人工智能、结构化及非结构化通用采集算法,因此商剑信息采集软件可以通用采集任何结构的信息,将网络雷达、舆论监督、数据库采集、文章采集、新闻采集、邮件采集、关键字采集、结构化信息采集、非结构化...

    pycurl-7.43.0.2-cp36-cp36m-win_amd64.whl

    Pyspider是一个强大的Web爬虫框架,集成了完整的项目管理流程,包括任务调度、结果存储、日志记录等。在Pyspider中,PyCurl主要用于处理网络请求,获取网页内容。然而,需要注意的是,这个版本的PyCurl不兼容Python ...

    3.2因特网上的信息检索教案_[归类].pdf

    将特定短语放在英文双引号内,能够确保查询结果中短语的完整出现,避免因分词造成的信息丢失。通过filetype:指定文件类型,可以帮助找到特定格式的文件,如PDF、DOC等。利用"intitle:"可以在搜索标题中包含关键词的...

    Java编写Baidu关键词工具

    通过学习这个项目,不仅可以掌握Java编程的基本技巧,还可以了解到如何利用Java实现网络爬虫、数据解析、GUI设计等实战技能,对提升个人的Java开发能力大有裨益。同时,对于想要了解搜索引擎工作原理和优化策略的人...

    python 学习视频

    - **知识点概述**:适合完全没有编程基础的学习者,从最基础的概念入手,逐步引导学员进入Python编程的世界。 - **关键内容**: - Python语言特点介绍; - 第一个Python程序; - 基本语法:变量、数据类型、...

    网站seo软件

    9. **豆豆优化完整版.exe**:这可能是一款完整的SEO优化工具,它可能包含上述所有功能,帮助用户一站式解决网站优化问题。 10. **doudouseo**:这个名字可能是该软件的简称或者某个特定模块,可能专注于特定的SEO...

    2172文化青年协会类网站模板(带手机端).zip

    该压缩包文件“2172文化青年协会类网站模板(带手机端).zip”包含了一个完整的网站模板,特别设计用于文化青年协会类的在线平台。这个模板不仅提供了电脑端的网页布局,还包含了手机端的适配版本,确保用户在不同设备...

    史上最好传智播客就业班.net培训教程60G 不下会后悔

    功能点 站内搜索、栏目管理、视频播放(完全模仿优酷视频页面)、焦点图、静态页面生成(新浪、搜狐等大型网站普遍采用的技术)、文章管理、无刷新评论、评论的无刷新分页、敏感词过滤、用户管理、友情链接管理、...

    精易模块[源码] V5.15

    3、恢复3.75版的“时间_格林威治转北京”命令,设置参数可将13位时间戳转换成北京时间。 4、改善“类_通用对话框”打开与保存对话框拥有易全部属性,感谢易友【詠不言敗】提议。 5、新增“类_通用对话框-&gt;选择字体”...

Global site tag (gtag.js) - Google Analytics