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高效编程技巧
Jan 07 Python
Python中模拟enum枚举类型的5种方法分享
Nov 22 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
解决pycharm无法调用pip安装的包问题
May 18 Python
python 获取当天每个准点时间戳的实例
May 22 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
Aug 02 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
基于python实现学生信息管理系统
Nov 22 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
Laravel框架数据库迁移操作实例详解
2020/04/06 PHP
JavaScript 指导方针
2007/04/05 Javascript
起点页面传值js,有空研究学习下
2010/01/25 Javascript
jquery和css3实现的炫酷时尚的菜单导航
2014/09/01 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript sort数组排序方法和自我实现排序方法小结
2016/06/06 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
NodeJS读取分析Nginx错误日志的方法
2019/05/14 NodeJs
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
[02:03]风行者至宝清风环佩外观展示
2020/09/05 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
python中查看变量内存地址的方法
2015/05/05 Python
Python SQLite3简介
2018/02/22 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
使用python实现希尔、计数、基数基础排序的代码
2019/12/25 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
Django nginx配置实现过程详解
2020/09/10 Python
德国家具购物网站:Möbel Höffner
2019/08/26 全球购物
生物科学专业自荐书
2014/06/20 职场文书
建筑结构施工求职信
2014/07/11 职场文书
2014企业领导班子四风对照检查材料思想汇报
2014/09/17 职场文书
政审证明范文
2015/06/19 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书