Python3使用xpath爬取豆丁网文档(已不适用,仅供参考)

  • 准备工作
  • 源代码

准备工作

首先,我们进入豆丁官网,随便点击一篇文档,进入如下界面:

接着,按“F12”进入开发者工具;找到图中所示的HTML标签(可在开发者工具中搜索图中关键词汇);定位的光标处中src中的链接则是我们后续下载需要的URL地址(在浏览器中搜索上述地址,就会发现第一页以图片的形式呈现在了网页中,这时我们便可以右键进行保存)。

细心的读者就会发现,这其中是有迹可循的。所有的页面都会一一对应一个div<id=“page_1,2,……”>,而我们所需要的URL地址都在这一标签下的img标签中,所以这就是我们本次要爬的重点。

注意事项:值得注意的是,你进入网站后,会发现网站后续的图片是没有刷新出来的,而没有刷新出来的页面是没有上述所说的div标签,所以是无法爬取的。这是该网站设计的反爬虫机制,防止你直接通过网址进行爬虫。
所以,无法通过该网页的url进行爬取。借鉴笔者前两篇文章:
爬取百度文库文档
爬取原创力文档

举一反三,复制开发者工具界面(div id=“contentcontainer”)这一标签里的源码(因人而异,读者也可以复制所有的源码,但是后续的xpath路径也要随之改变)复制到txt文件中,再读取txt文件(如果读者有更好的解决办法,欢迎在评论区交流学习!)

  • 值得注意的是,一定要把所有页面全部加载出来,不然有些页面就没有src地址
    好的,啰嗦了这么多。下面,让我们进入源代码环节(其实,和前面两篇文章结构一样,本质上是换汤不换药)。

源代码

"""
爬取豆丁文档网站上的文档
"""
from urllib.request import urlretrieve
import time
from lxml import etree
import numpy as npfrom docx import Document
from os import listdir
from docx.shared import Inches
from docx.shared import Cm
import osdir_path = 'F:\PycharmProjects\Scrapy\\results'  # 要保存的文件夹目录# 删除文件夹下原有的jpg文件
def del_img():for files in os.listdir(dir_path):if files.endswith(".jpg"):os.remove(os.path.join(dir_path, files))# 从html.txt文件中读取网页源码下载图片,并从数字1按顺序依次对图片命名
def print_img(results):results = etree.HTML(results)content_list = results.xpath('//*[@id="contentcontainer"]/div')for content in content_list:img_url = content.xpath('.//div[1]/div/img/@src')# 设个延时time.sleep(np.random.randint(0, 1))if len(img_url):img_url = img_url[0].strip()img_name = content.xpath('.//div[1]/div/@id')img_name = img_name[0].strip()num = int(img_name[4:])img_name = dir_path + str(num) + '.jpg'# 根据src地址下载图片,下载目录默认是当前工作路径urlretrieve(img_url, img_name)print('打印第', num, '张成功!')# 将图片加载进word文档,并保存
def print_docx():docx = Document()# 将文档的页面边距均设为0sections = docx.sectionsfor section in sections:section.top_margin = Cm(0)section.bottom_margin = Cm(0)section.left_margin = Cm(0)section.right_margin = Cm(0)pictures = [fn for fn in listdir(dir_path) if fn.endswith('.jpg')]pictures.sort()pictures.sort(key=lambda x: int(x[:-4]))print(pictures)for img_name in pictures:img_name = dir_path + img_namedocx.add_picture(img_name, height=Inches(11))print(img_name, '添加成功!')# 保存文档docx_name = '豆丁'docx_name = docx_name + '.docx'  # 文档名字docx.save(docx_name)print(docx_name, '保存成功!')if __name__ == '__main__':with open('html.txt', 'r', encoding='utf-8') as file:data = file.read()# 删除原有的jpgdel_img()# 下载jpgprint_img(data)# 将jpg导入docxprint_docx()

xpath地址不知道的读者同样可以参考前面两篇文章:
爬取百度文库文档
爬取原创力文档

Python3使用xpath爬取豆丁网文档相关推荐

  1. xpath爬取当当网

    xpath爬取当当网 import requests from lxml import etree #from itertools import chain #import json # 利用接口读取 ...

  2. python下载豆丁网文档

    豆丁网文档有自己的格式(docin),,所以需要下载下来后再解密.... common.py文件在http://blog.csdn.net/qq506657335/article/details/20 ...

  3. 使用Python+xpath爬取知网所有中英文期刊的封面背景图片

    使用Python+xpath+beautifulsoup爬取知网所有中英文期刊的封面背景图片` import json import requests from bs4 import Beautifu ...

  4. 爬虫爬评书吧_爬虫学习:xpath爬取评书网

    在家闲着,想找点评书听,但找了很久都没找到方便打包下载的地方.于是就拿起自学的python爬虫,自己动手丰衣足食. 运行环境:Windows7,python3.7 操作步骤: 1.打开选好的评书主页面 ...

  5. xpath爬取mooc网课程

    要求: 爬取的链接:http://www.imooc.com/course/list 爬取的内容:课程链接,课程的图片url,课程的名称,学习人数,课程描述 爬取的内容如何存储: 文件(csv): m ...

  6. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

  7. xpath爬取我爱我家杭州地区租房网

    xpath爬取我爱我家杭州地区租房网 分析房源信息列表页 网页的请求属于get,然后找我们需要的信息所在的模块 可以看见我们需要的网页数据在doc模块中,找到这个模块,分析他的请求,在requests ...

  8. Python2 Python3 爬取赶集网租房信息,带源码分析

    *之前偶然看了某个腾讯公开课的视频,写的爬取赶集网的租房信息,这几天突然想起来,于是自己分析了一下赶集网的信息,然后自己写了一遍,写完又用用Python3重写了一遍.之中也遇见了少许的坑.记一下.算是 ...

  9. 使用Xpath爬取校花网,致敬10年前的校花『和』我们逝去的青春

    使用xpath爬取校花网 难点: 1.各个分类栏目下的页码url不统一 2.只取前三页,或者后三页 文章代码仅使用xpath和requests,本来想用scrapy框架的,但是偷了个懒. 所以就-哈哈 ...

  10. 采用requests请求+xpath与正则表达式解析+Mysql与json存取:爬取高考网主页与子页的学校基本信息和往年录取分数线

    爬取高考网主页与子页的学校基本信息和往年录取分数线 高考网 创建Mysql数据库和存储实现 先了解下高考网的一些爬取阻碍 完整代码 高考网 链接: http://college.gaokao.com/ ...

最新文章

  1. java怎么做简易的游戏,Java小项目之《简易桌面小游戏》
  2. 计算机模块怎么算,计算基础
  3. 洛谷P1558 色板游戏
  4. 最可怕的企业“内卷化”,是走入以下10个误区而不自知
  5. numpy genfromtxt 读取字符_numpy组队学习1: 输入输出
  6. JUNIT Hello World
  7. oracle删除死锁进程
  8. 理解UIApplication
  9. Vue打包项目图片等静态资源的处理
  10. Python数据结构与算法(1.7)——算法分析
  11. 由有理函数的广义积分引入,谈谈复变函数论中的留数
  12. 小朋友Stem课程制作3D打印无人机
  13. 栅格数据中的 Zone 与 Region
  14. 活动倒计时的一些想法
  15. 计算机三维制图描述零件绘制过程,AutoCAD三维实体零件图绘制
  16. 苏世民:25条工作和生活原则
  17. 里氏代换原则(Liskov Substitution Principle)
  18. 21天养成编程习惯:09月Scratch编程训练营计划!
  19. 用Python+Moviepy+OpenCV制作灯光秀短视频
  20. php微信公众号向指定客服发信息,微信公众号给用户发送一条消息 客服消息

热门文章

  1. 01.FFmpeg下载以及安装
  2. win7下载原型软件Axure
  3. 一款完整的多用户微信公众平台开发源码,带文档免费分享
  4. spring boot通过JPA访问Mysql
  5. Hadoop 配置文件存放位置
  6. CCAI2018 | 韩家炜:大规模文本数据挖掘的新方向
  7. R-CNN算法学习(步骤二:特征提取)
  8. 2021爱分析·快消品牌商数字化厂商全景报告
  9. 阿里巴巴的商品主图视频要怎么保存比较快
  10. Linux 抓包还不会?这篇文章赶紧收藏