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 相关文章推荐
Python3基础之基本数据类型概述
Aug 13 Python
Python中字典和JSON互转操作实例
Jan 19 Python
Python 装饰器使用详解
Jul 29 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
Apr 11 Python
python 读取DICOM头文件的实例
May 07 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python 日期排序的实例代码
Jul 11 Python
django做form表单的数据验证过程详解
Jul 26 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
Python itertools.product方法代码实例
Mar 27 Python
Python 使用office365邮箱的示例
Oct 29 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 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的一个登录的类 [推荐]
2007/03/16 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
php7 错误处理机制修改实例分析
2020/05/25 PHP
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
jquery实现可拖动DIV自定义保存到数据的实例
2013/11/20 Javascript
JavaScript调试工具汇总
2014/12/23 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
2016/09/19 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
跟老齐学Python之大话题小函数(1)
2014/10/10 Python
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
2019 Python最新面试题及答案16道题
2019/04/11 Python
Python2与Python3的区别点整理
2019/12/12 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
input file上传文件样式支持html5的浏览器解决方案
2012/11/14 HTML / CSS
服务承诺书范文
2014/05/19 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
2015年班干部工作总结
2015/04/29 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server