Python实现的爬取百度文库功能示例


Posted in Python onFebruary 16, 2019

本文实例讲述了Python实现的爬取百度文库功能。分享给大家供大家参考,具体如下:

# -*- coding: utf-8 -*-
from selenium import webdriver
from bs4 import BeautifulSoup
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH# 用来居中显示标题
from time import sleep
from selenium.webdriver.common.keys import Keys
# 浏览器安装路径
#BROWSER_PATH=\'C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe'
#目的URL
DEST_URL='https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html'
#用来保存文档
doc_title = ''
doc_content_list = []
def find_doc(driver, init=True):
  global doc_content_list
  global doc_title
  stop_condition = False
  html = driver.page_source
  soup1 = BeautifulSoup(html, 'lxml')
  if (init is True): # 得到标题
    title_result = soup1.find('div', attrs={'class': 'doc-title'})
    doc_title = title_result.get_text() # 得到文档标题
    # 拖动滚动条
    init_page = driver.find_element_by_xpath( "//div[@class='foldpagewg-text-con']")
    print(type(init_page), init_page)
    driver.execute_script('arguments[0].scrollIntoView();', init_page)
    init_page.click()
    init = False
  else:
    try:
      page = driver.find_element_by_xpath( "//div[@class='pagerwg-schedule']")
      #print(type(next_page), next_page)
      next_page = driver.find_element_by_class_name("pagerwg-button")
      station = driver.find_element_by_xpath( "//div[@class='bottombarwg-root border-none']")
      driver.execute_script('arguments[0].scrollIntoView(false);', station)
      #js.executeScript("arguments[0].click();",next_page);
      #sleep(5)
      '''js = "window.scrollTo(508,600)"
      driver.execute_script(js)'''
      next_page.click()
    except:
      #结束条件
      print("找不到元素")
      stop_condition = True
      #next_page.send_keys(Keys.ENTER)
      # 遍历所有的txt标签标定的文档,将其空格删除,然后进行保存
  content_result = soup1.find_all('p', attrs={'class': 'txt'})
  for each in content_result:
    each_text = each.get_text()
    if ' ' in each_text:
      text = each_text.replace(' ', '')
    else:
      text = each_text
    # print(each_text)
    doc_content_list.append(text)
          # 得到正文内容
  sleep(2) # 防止页面加载过慢
  if stop_condition is False:
    doc_title, doc_content_list = find_doc(driver, init)
  return doc_title, doc_content_list
def save(doc_title, doc_content_list):
  document = Document()
  heading = document.add_heading(doc_title, 0)
  heading.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中显示
  for each in doc_content_list:
    document.add_paragraph(each)
  # 处理字符编码问题
  t_title = doc_title.split()[0]
  #print(t_title)
  #document.save('2.docx')
  document.save('百度文库-%s.docx'% t_title)
  print("\n\nCompleted: %s.docx, to read." % t_title)
  driver.quit()
if __name__ == '__main__':
  options = webdriver.ChromeOptions()
  options.add_argument('user-agent="Mozilla/5.0 (Linux; Android 4.0.4; \ Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) \ Chrome/18.0.1025.133 Mobile Safari/535.19"')
  #driver = webdriver.Chrome(BROWSER_PATH, chrome_options=options)
  driver = webdriver.Chrome(chrome_options=options)
  driver.get(DEST_URL)
  #JavascriptExecutor js = (JavascriptExecutor) driver;
  print("**********START**********")
  title, content = find_doc(driver, True)
  save(title, content)
  driver.quit()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python(Tornado)模拟登录小米抢手机
Nov 12 Python
有关wxpython pyqt内存占用问题分析
Jun 09 Python
使用Python编写类UNIX系统的命令行工具的教程
Apr 15 Python
python数据结构之链表详解
Sep 12 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
Python分割指定页数的pdf文件方法
Oct 26 Python
python实现翻转棋游戏(othello)
Jul 29 Python
利用Python实现kNN算法的代码
Aug 16 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python实现简单日志记录库glog的使用
Dec 13 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
May 26 Python
对Python3 序列解包详解
Feb 16 #Python
对Python3 pyc 文件的使用详解
Feb 16 #Python
Python父目录、子目录的相互调用方法
Feb 16 #Python
python 获得任意路径下的文件及其根目录的方法
Feb 16 #Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 #Python
Python3 导入上级目录中的模块实例
Feb 16 #Python
对Python3 goto 语句的使用方法详解
Feb 16 #Python
You might like
PHP 各种排序算法实现代码
2009/08/20 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
2017/08/04 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
Opacity.js
2007/01/22 Javascript
JavaScript 调试器简介
2009/02/21 Javascript
Extjs 几个方法的讨论
2010/01/28 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
jQuery 网易相册鼠标移动显示隐藏效果实现代码
2013/03/31 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
JavaScript实现文本框中默认显示背景图片在获得焦点后消失的方法
2015/07/01 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
python使用matplotlib库生成随机漫步图
2018/08/27 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
Python如何将函数值赋给变量
2020/04/28 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
七匹狼男装广告词
2014/03/21 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis