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入门及进阶笔记 Python 内置函数小结
Aug 09 Python
Python的Urllib库的基本使用教程
Apr 30 Python
Python只用40行代码编写的计算器实例
May 10 Python
Python实现的文本编辑器功能示例
Jun 30 Python
spyder常用快捷键(分享)
Jul 19 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
详解python的ORM中Pony用法
Feb 09 Python
Python3如何判断三角形的类型
Apr 12 Python
python语言的优势是什么
Jun 17 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
flask项目集成swagger的方法
Dec 09 Python
只用20行Python代码实现屏幕录制功能
Jun 02 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数组函数序列之in_array() 查找数组值是否存在
2011/10/29 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
JS操作图片(增,删,改) 例子
2013/04/17 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
js右下角弹出提示框示例代码
2016/01/12 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
python实现对一个完整url进行分割的方法
2015/04/29 Python
Python Web版语音合成实例详解
2019/07/16 Python
使用python 对验证码图片进行降噪处理
2019/12/18 Python
django 利用Q对象与F对象进行查询的实现
2020/05/15 Python
Python日志处理模块logging用法解析
2020/05/19 Python
python 实现表情识别
2020/11/21 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
芬兰灯具网上商店:Nettilamppu.fi
2018/06/30 全球购物
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
社区包粽子活动方案
2014/01/21 职场文书
小学信息技术教学反思
2014/02/10 职场文书
公司投资建议书
2014/05/16 职场文书
冬季安全检查方案
2014/05/23 职场文书
2014年服务员工作总结
2014/11/18 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers
Python 中 Shutil 模块详情
2021/11/11 Python
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL