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中变量交换的例子
Aug 25 Python
Python删除windows垃圾文件的方法
Jul 14 Python
Python实现复杂对象转JSON的方法示例
Jun 22 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
用Python实现数据的透视表的方法
Nov 16 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
python re库的正则表达式入门学习教程
Mar 08 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
使用SQLAlchemy操作数据库表过程解析
Jun 10 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
python获取整个网页源码的方法
Aug 03 Python
Python 2.6.6升级到Python2.7.15的详细步骤
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中使用redis队列操作实例代码
2013/02/07 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
2013/05/19 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
js JSON.stringify()基础详解
2019/06/19 Javascript
vue 监听 Treeselect 选择项的改变操作
2020/08/31 Javascript
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
商务英语专业应届毕业生求职信
2013/10/28 职场文书
个性发展自我评价
2014/02/11 职场文书
服务承诺书怎么写
2014/05/24 职场文书
甲午风云观后感
2015/06/02 职场文书
红色故事汇观后感
2015/06/18 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
导游词之临安白水涧
2019/11/05 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle