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 map和reduce函数用法示例
Feb 26 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Python编程中的异常处理教程
Aug 21 Python
Python字符串处理实现单词反转
Jun 14 Python
浅谈Python NLP入门教程
Dec 25 Python
python 显示数组全部元素的方法
Apr 19 Python
python  创建一个保留重复值的列表的补码
Oct 15 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
Python实现随机爬山算法
Jan 29 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处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
详解Windows下安装Nodejs步骤
2017/05/18 NodeJs
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
JS获取数组中出现次数最多及第二多元素的方法
2017/10/27 Javascript
JavaScript实现QQ列表展开收缩扩展功能
2017/10/30 Javascript
基于vue.js实现分页查询功能
2018/12/29 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
Python生成器以及应用实例解析
2018/02/08 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
瑞典最好的运动鞋专卖店:Sneakersnstuff
2016/08/29 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
毕业生的自我评价分享
2013/12/18 职场文书
创业计划书六个要素
2013/12/26 职场文书
房屋继承公证书
2014/04/10 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
应急管理工作总结2015
2015/05/04 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
员工担保书范本
2015/09/22 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL