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 相关文章推荐
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
详解python中的文件与目录操作
Jul 11 Python
Python机器学习之决策树算法实例详解
Dec 06 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python实现全排列的打印
Aug 18 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
logging level级别介绍
Feb 21 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
TensorFLow 数学运算的示例代码
Apr 21 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
PHP数组及条件,循环语句学习
2012/11/11 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
2017/06/20 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
window.location.href中url中数据量太大时的解决方法
2013/12/23 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
js变量值传到php过程详解 将php解析成数据
2019/06/26 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
Python交换变量
2008/09/06 Python
教你如何在Django 1.6中正确使用 Signal
2014/06/22 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
详细探究Python中的字典容器
2015/04/14 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
Python正则表达式如何匹配中文
2020/05/27 Python
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
网络管理专业求职信
2014/03/15 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年全国“爱牙日”宣传活动总结
2015/03/23 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
获奖感言范文
2015/07/31 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
webpack的移动端适配方案小结
2021/07/25 Javascript