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中os和shutil模块实用方法集锦
May 13 Python
Python获取Linux系统下的本机IP地址代码分享
Nov 07 Python
Python根据区号生成手机号码的方法
Jul 08 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
python实现m3u8格式转换为mp4视频格式
Feb 28 Python
在windows下Python打印彩色字体的方法
May 15 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
mac系统下Redis安装和使用步骤详解
Jul 09 Python
python时间time模块处理大全
Oct 25 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
两个强悍的php 图像处理类1
2009/06/15 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
php上传文件问题汇总
2015/01/30 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
js 字符串转换成数字的三种方法
2013/03/23 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
jquery延迟对象解析
2016/10/26 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python打开windows应用程序的实例
2019/06/28 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
python pyinstaller打包exe报错的解决方法
2019/11/02 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
高中自我评价范文
2014/01/27 职场文书
大学旷课检讨书
2014/01/28 职场文书
个性发展自我评价
2014/02/11 职场文书
《威尼斯的小艇》教学反思
2014/02/17 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js