Python小爬虫-自动下载三亿文库文档

  新手学python,写了一个抓取网页后自动下载文档的脚本,和大家分享。

首先我们打开三亿文库下载栏目的网址,比如专业资料(IT/计算机/互联网)http://3y.uu456.com/bl-197?od=1&pn=0,可以观察到,链接中pn=后面的数字就是对应的页码,所以一会我们会用iurl = ‘http://3y.uu456.com/bl-197?od=1&pn=‘,后面加上页码来抓取网页.

一般网页会用1,2,3...不过机智的三亿文库用0,25,50...来表示,所以我们在拼接url时还得转换一下。

右键查看网页源代码,可以观察到这里每一个文档都用一个<a>标签标记,href对应文档的链接,title是文档名字,我们只需要用正则表达式将其“扣”出来就可以了.

不过你会发现我们扣出来的文档地址eg:"bp-602d123348d7c1c708a14sqb-1.html", 并不是真正的文档下载地址,进一步点击文档至下载页面,我们可以发现文档真正的下载路径是:“dlDoc-602d123348d7c1c708a14sqb-1-toword.doc”,清晰易见,我们只需提取文档序号602d123348d7c1c708a14sqb-1,再拼接起来便OK了。

<p>
  <a href="bp-602d123348d7c1c708a14sqb-1.html" title="视频会议系统" target="_blank">视频会议系统</a>
</p>
<a rel="nofollow" target="_blank" href="dlDoc-602d123348d7c1c708a14sqb-1-toword.doc">视频会议系统-第1页.doc</a>

运行结果如下:

代码如下:

# -*- coding: utf-8 -*-
#-----------------------------------------------------
#   功能:将访问的页面存储为html文件,并将页面内的文档下载至本地
#   作者:chenbjin
#   日期:2014-07-10
#   语言:Python 2.7.6
#-----------------------------------------------------

import string
import urllib
import urllib2
import re
import os

#函数功能:抓取begin-end页面,存入threeuPage文件夹中,并将其中的文档下载到threeuFile文件夹中。
def threeu_page(burl,url,begin_page,end_page) :

    #The directory to save web page
    sPagePath = ‘./treeuPage‘
    if not os.path.exists(sPagePath) :
        os.mkdir(sPagePath)

    #The director to save downloaded file
    sFilePath = ‘./threeuFile‘
    if not os.path.exists(sFilePath) :
        os.mkdir(sFilePath)

    for i in range(begin_page,end_page+1) :        pn = (i-1)*25
        #自动填充成六位的文件名,eg:00001.html
        sName = sPagePath + ‘/‘+ string.zfill(i,5) + ‘.html‘
        print ‘Spidering the ‘ + str(i) + ‘ page ,saved to ‘ + sName + ‘...‘
        f = open(sName,‘w+‘)
        user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)‘
        headers = { ‘User-Agent‘ : user_agent }
        request = urllib2.Request(url+str(pn),headers = headers)

        try:
            con = urllib2.urlopen(request, timeout=10).read()
            #正则匹配出文档的地址
            myItems = re.findall(‘<a href="bp-(.*?).html" title="(.*?)" target="_blank">(.*?)</a>‘,con,re.S)
            #print "Total : ",len(myItems)
            for item in myItems :
                print ‘Dowloading the ‘ +item[0] + "  "+ item[1].decode(‘gbk‘) + ‘...‘
                #下载文档
                durl = burl+item[0]+‘-toword.doc‘
                urllib.urlretrieve(durl,sFilePath+‘/‘+item[1].decode(‘gbk‘)+‘.doc‘)
        except urllib2.URLError,e :
            print e
        else:
            f.write(con)
        f.close()

#这是三亿文库中“专业资料 > IT/计算机 > 互联网”的地址
burl = ‘http://3y.uu456.com/dlDoc-‘
iurl = ‘http://3y.uu456.com/bl-197?od=1&pn=‘
ibegin = 1
iend = 1
threeu_page(burl,iurl,ibegin,iend)
#end

  参考资料:

1.Python爬虫入门教程:http://blog.csdn.net/column/details/why-bug.html

Python小爬虫-自动下载三亿文库文档

时间: 2025-01-30 18:03:35

Python小爬虫-自动下载三亿文库文档的相关文章

定向数据爬虫和搜索引擎(Directional Spider)设计文档

  定向数据网络爬虫和搜索引擎项目设计 (新闻数据抓取.分析.加工.检索) 版本号:            v 1.0.0 编写人:          张  文  豪 日  期:       2014年6月10日 文档说明:这个文档还在编写之中,文章中很多写在“保留”二字的不是每月东西,而是没有写.虽然没有具体实现,但是我觉得我把我的经验和思考都写进去了.虽然对于读者来说这个文档相当粗糙,但是是我一个很看重的东西.如果真的有人愿意认真阅读这篇文章,我会很开心和大家交流探讨,欢迎留言和联系我. [

js仿百度文库文档上传页面的分类选择器_第二版

仿百度文库文档上传页面的多级联动分类选择器第二版,支持在一个页面同时使用多个分类选择器: 此版本把HTML,CSS,以及图片都封装到"category.js"中,解决因文件路径找不到样式及图片的问题: 源码下载地址:http://download.csdn.net/detail/testcs_dn/7290577 初始状态,一个页面使用两个,可以初始化之前选中的分类: 选择状态: 当选中一个分类后,会触发"onChange"事件,如上图中的"您选择的分类编

Office 365 小技巧 :Microsoft Teams_ 就地编辑文档

Blog 地址:https://blog.51cto.com/13969817 Microsoft Teams 最大的特性是可以加强团队之间的协作能力,团队可以在同一个地方进行沟通和协作,并且与Microsoft Office深度集成,与团队成员进行文档共享,多人协同编辑,团队的工作方式发生了改变,工作效率得到了提升. 但很多企业在推广Teams的时候,终端用户都需要一个转型的过程,他们希望分享的文档可以就地编辑,保留传统的编辑模式,而非在线编辑,这种情况下,我们该如何满足用户的需求呢? 今天我

vue.js 查看百度文库文档

<template> <div> <div id="reader"></div> </div> </template> <script> //doc.js文件地址 http://static.bcedocument.com/reader/v2/doc_reader_v2.js import doc from '../../libs/doc'; export default { data(){ retur

数据格式转换 (三)Office文档转HTML

一.引言 Android中通过findViewById在布局文件中找到需要的View,加入一个Activity里面有许多的View需要初始化,那将是一件很繁琐的事情.当然Google一下你会发现有很多Android Annotations框架.比如比较有名的"Android Annotations",这样的框架很复杂,用起来也比较麻烦,还有一些BUG,第一次使用也花费了不少时间研究.也许你在项目中只希望用到 Inject View这个功能,又或者你想知道这个实现的原理是怎样的.本文主要

3g上网卡的驱动程序的自动更新web端架构文档

几年前写的. 看是否有人用得上吧 1   简介 本文档详细描述了基于ASP.NET平台和IIS服务的T-Mobile自动更新系统的实现框架. 本文档主要从技术架构和业务架构两个方面来着手来描述T-Mobile自动更新系统的架构,以使相关人员快速了解产品的架构. 1.1   目的 本文档将从架构方面对T-Mobile自动更新系统进行综合概述,其中会使用用例视图.逻辑视图.部署视图.实施视图等多种不同的架构视图来描述系统的各个方面. 这些描述用于记录并表述已对系统的架构方面做出的重要决策,同时确定系

IIS下不能下载文件的docx文档,XLSX文档的设置方法(转)

IIS下不能下载文件的docx文档,XLSX文档的设置方法 Office 2007的的界面风格默认格式中都是.DOCX,XLSX,PPTX等等后缀,连结中包含此类文件时,界面风格默认什么打不开的其实只要在IIS中的MIME的类型中添加对此格式的支持就可以了下面提供两种方法扩展功能,推荐使用第二种. 方法一:打开网站属性,的HTTP头选项对话牌,添加的MIME类型 新建一种类型,填入需要的 .docx ,类型为 application/vnd.openxmlformats-officedocume

【三】MongoDB文档的CURD操作

一.插入文档 使用insert方法插入文档到一个集合中,如果集合不存在创建集合,有以下几种方法: db.collection.insertOne({}):(v3.2 new)  #插入一个文档到集合中 > db.users.insertOne( ... { ... name:"Marry", ... age:26, ... status:"pending" ... } ... ) { "acknowledged" : true, "

自动生成并导出word文档

今天很荣幸又破解一现实难题:自动生成并导出word文档 先看页面效果: word效果: 代码: 先搭建struts2项目 创建action,并在struts.xml完成注册 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"