版权声明:本文为博主原创文章,欢迎转载,并请注明出处。联系方式:460356155@qq.com

廖雪峰大大贡献的教程写的不错,写了个爬虫把教程保存为word文件,供大家方便下载学习:http://pan.baidu.com/s/1o7InnQE

运行环境:python 2.7、beautifulsoup4、python-docx 0.8.6,Python爬虫源代码如下:

# -*- coding:utf-8 -*-
__author__ = 'zhengbiqing 460356155@qq.com'
from bs4 import BeautifulSoup
from urllib import urlopen,urlretrieve
import re
from collections import OrderedDict
from docx import Document
from docx.shared import Inches
import docx
import os
import time
import sys
from PIL import Image baseUrl = 'http://www.liaoxuefeng.com'
#python
#firstPageUrl = '/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000'
#git
#firstPageUrl = '/wiki/0013739516305929606dd18361248578c67b8067c8c017b000'
#javascript
firstPageUrl = '/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000' INDENT = 8
TMP_IMG_NAME = 'tmpimg.jpg'
A4_WIDTH = 590
A4_WIDTH_INCH = 6
PAGE_OPEN_DELAY = 1 #保存目录信息的有序字典
content = OrderedDict() def writePage( url, indentNum, doc ):
'''
保存一个html页面
:param url: 页面地址
:param indentNum: 目录项缩进量,形成层次性的目录结构
:param doc: 指向保存到的word文件
:return:
'''
bsObj = BeautifulSoup( urlopen( url ), 'lxml' )
#找到章节标题,并保存
title = bsObj.find( 'div', class_="x-content" ).find( 'h4' )
doc.add_heading( title.get_text(), int(indentNum) )
#找到文章内容主体,得到每一个p标签,遍历每个p标签
pageContent = bsObj.find( 'div', class_="x-wiki-content" )
pages = pageContent.findAll( 'p' ) for page in pages:
#对img标签,得到图片并保存到word文件
imgs = page.findAll( 'img' )
for img in imgs:
imgUrl = baseUrl + img['src'] if img['src'].startswith( '/') else img['src']
urlretrieve( imgUrl, TMP_IMG_NAME )
pic = Image.open( TMP_IMG_NAME )
if (pic.size)[0] > A4_WIDTH:
doc.add_picture( TMP_IMG_NAME, width = Inches(A4_WIDTH_INCH) )
else:
doc.add_picture( TMP_IMG_NAME )
#保存文字
doc.add_paragraph( page.get_text() )
#添加分页
doc.add_page_break() def writeContent( url, doc ):
'''
得到目录信息,并保存为word文件目录,但未实现链接跳转功能,python-docx的该功能在开发中
:param url: 目录信息业html页面地址
:param doc: 指向保存到的word文件
:return:
'''
html = urlopen( url )
bsObj = BeautifulSoup( html, 'lxml' )
#找到符合一定特征的目录项
contentList = bsObj.findAll( 'li', { 'style': re.compile( '^margin-left.*' ), 'id': not None } ) for contentItem in contentList:
contentLink = contentItem.find( 'a' )
#得到目录项的缩进数,表征了目录项的层次
indent = re.findall( '\d+', contentItem['style'] )
contentStr = ' '* INDENT * int( indent[0] ) + contentLink.string
#避免重复的目录项
if contentStr not in content:
#目录信息,包括标题、链接、缩进
content[contentStr] = [contentLink['href'], indent[0]] doc.add_heading( u'目录', 0 )
for item,value in content.items():
#print item, value
#保存目录到word文档
doc.add_paragraph( item ) doc.add_page_break() def fileName( url ):
'''
从html中得到word文件名
'''
html = urlopen( url )
bsObj = BeautifulSoup( html, 'lxml' )
return bsObj.title.string fileName = fileName( baseUrl + firstPageUrl ) + '.doc'
document = docx.Document( fileName ) if os.path.exists( fileName ) else docx.Document() writeContent( baseUrl + firstPageUrl, document )
writePage( baseUrl + firstPageUrl, '', document ) for page in content.values():
#调试信息
print baseUrl + page[0]
writePage( baseUrl + page[0], page[1], document )
time.sleep( PAGE_OPEN_DELAY ) #调试时采用,只读几个页面
'''
for i in range( 1 ):
#调试信息
print baseUrl + content.values()[i][0]
writePage( baseUrl + content.values()[i][0], content.values()[i][1], document )
time.sleep( PAGE_OPEN_DELAY )
''' document.save( fileName ) #删除图片临时文件
try:
os.remove( TMP_IMG_NAME )
except:
print 'remove file fail'

Python爬虫——用BeautifulSoup、python-docx爬取廖雪峰大大的教程为word文档的更多相关文章

  1. 爬取廖雪峰的python3教程

    从廖雪峰老师的python教程入门的,最近在看python爬虫,入手了一下 代码比较low,没有用到多线程和ip代理池 然后呢,由于robots.txt的限定,构建了一些user-agent,并放慢的 ...

  2. python爬虫实践(二)——爬取张艺谋导演的电影《影》的豆瓣影评并进行简单分析

    学了爬虫之后,都只是爬取一些简单的小页面,觉得没意思,所以我现在准备爬取一下豆瓣上张艺谋导演的“影”的短评,存入数据库,并进行简单的分析和数据可视化,因为用到的只是比较多,所以写一篇博客当做笔记. 第 ...

  3. Python爬虫初探 - selenium+beautifulsoup4+chromedriver爬取需要登录的网页信息

    目标 之前的自动答复机器人需要从一个内部网页上获取的消息用于回复一些问题,但是没有对应的查询api,于是想到了用脚本模拟浏览器访问网站爬取内容返回给用户.详细介绍了第一次探索python爬虫的坑. 准 ...

  4. 【python爬虫】一个简单的爬取百家号文章的小爬虫

    需求 用"老龄智能"在百度百家号中搜索文章,爬取文章内容和相关信息. 观察网页 红色框框的地方可以选择资讯来源,我这里选择的是百家号,因为百家号聚合了来自多个平台的新闻报道.首先看 ...

  5. Python爬虫开源项目代码,爬取微信、淘宝、豆瓣、知乎、新浪微博、QQ、去哪网等 代码整理

    作者:SFLYQ 今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [ ...

  6. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  7. python 爬虫proxy,BeautifulSoup+requests+mysql 爬取样例

    实现思路: 由于反扒机制,所以需要做代理切换,去爬取,内容通过BeautifulSoup去解析,最后入mysql库 1.在西刺免费代理网获取代理ip,并自我检测是否可用 2.根据获取的可用代理ip去发 ...

  8. 23个Python爬虫开源项目代码:爬取微信、淘宝、豆瓣、知乎、微博等

    来源:全球人工智能 作者:SFLYQ 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.Wec ...

  9. python爬虫入门新手向实战 - 爬取猫眼电影Top100排行榜

    本次主要爬取Top100电影榜单的电影名.主演和上映时间, 同时保存为excel表个形式, 其他相似榜单也都可以依葫芦画瓢 首先打开要爬取的网址https://maoyan.com/board/4, ...

随机推荐

  1. Can We Make Operating Systems Reliable and Secure?

    Andrew S. Tanenbaum, Jorrit N. Herder, and Herbert Bos Vrije Universiteit, Amsterdam Microkernels-lo ...

  2. Lua-pb 升级到Lua5.3

    项目lua库升级到5.3版本后,最头疼的就是原先的一些第三方库原先只是基于lua5.1设计的,比如protobuff 相关的的. 之前项目引入Lua-pb 实现protobuf的解析和使用,但是这个库 ...

  3. 《Java大学教程》—第14章 抽象、继承和接口

    自测题:1.    解释抽象和抽象数据类型的概念.P333抽象的概念是仅仅关注对象可以完成什么工作,而不必担心如何完成工作的细节.类模板通常被称为抽象数据类型.因为这类数据暴露给用户的所有信息仅仅是方 ...

  4. input accept属性限制文件上传格式

    上传文件的类型:具体做法如下所示: 注意:accept属性可以限制上传格式,其有兼容性如下 <1>上传.csv格式的 <input text="file" acc ...

  5. hover效果的几种方式

    1.改变透明度 #share_wrap a{display: inline-block;width: 48px;height: 44px;background: url(/images/finance ...

  6. centos7下安装docker(15.6docker跨主机网络---Weave)

    Weave是weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多个主机上的容器连接起来.对于容器来说,weave就像一个巨大的网络交换机,容器可以直接通信,无需NAT和端 ...

  7. 构建企业 YUM仓库

    构建企业 YUM仓库 本地光盘提供基础软件包Base yum缓存提供update软件包 yum缓存提供常用软件包: nginx, zabbix, docker, saltstack 环境准备 系统 I ...

  8. 微服务框架surging学习之路——序列化 (转载https://www.cnblogs.com/alangur/p/10407727.html)

    微服务框架surging学习之路——序列化   1.对微服务的理解 之前看到在群里的朋友门都在讨论微服务,看到他们的讨论,我也有了一些自己的理解,所谓微服务就是系统里的每个服务都 可以自由组合.自由组 ...

  9. linux之dos2unix命令

    今天在使用脚本升级的时候碰到一个问题,然后写了一个简单的自测脚本进行测试,如上图,理论上应该输出 /usr/local/mysql/bin/mysqldump -h 127.0.0.1 -uroot ...

  10. 项目Alpha冲刺4

    作业描述 课程: 软件工程1916|W(福州大学) 作业要求: 项目Alpha冲刺(团队) 团队名称: 火鸡堂 作业目标: 介绍第四天冲刺的项目进展.问题困难和心得体会 1.团队信息 队名:火鸡堂 队 ...