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实现自主查询实时天气
Jun 22 Python
详解Python3的TFTP文件传输
Jun 26 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
详解Python字典的操作
Mar 04 Python
如何用Python制作微信好友个性签名词云图
Jun 28 Python
python实现按行分割文件
Jul 22 Python
python关于变量名的基础知识点
Mar 03 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
scrapy结合selenium解析动态页面的实现
Sep 28 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
Python常用扩展插件使用教程解析
Nov 02 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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设计模式之单例模式实例分析
2015/02/25 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
js验证真实姓名与身份证号是否匹配
2015/10/13 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
一次记住JavaScript的6个正则表达式方法
2018/02/22 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
解决vue.js中settimeout遇到的问题(时间参数短效果不稳定)
2020/07/21 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
Viking比利时:购买办公用品
2019/10/30 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
音乐学个人的自荐书范文
2013/11/26 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
保密承诺书
2014/03/27 职场文书
2014银行授权委托书样本
2014/10/04 职场文书
高中地理教学反思
2016/02/19 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
Python+tkinter实现高清图片保存
2022/03/13 Python
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL