在用前面的方法爬取百度文库的文章时,发现只能爬取已显示出来的几页文章,而对于没有显示的页数则无法获得其内容。如果要完整的看到整篇文章,需要手动地点击底下的“继续阅读”,使所有的页数都显示出来。

查看元素后发现,展开前的html和展开后的html是不同的,前者隐藏页的的文本内容是没有显示的。但是爬虫获得的是展开前的html文件,所以也就只能获得部分内容。
本文使用了一个工具来自动化操作网页,获得展开后的html。

使用Selenium自动化工具来操控浏览器

  1. Selenium的安装
    pip3 install Selenium
  2. 安装chromedriver.exe
    这里踩了很多坑。
    驱动下载地址:
    http://chromedriver.storage.googleapis.com/index.html
    一定要下载与chrome版本相匹配的chromedriver,而且注意并不是版本号越大的驱动对应最新的chrome浏览器,要仔细查看notes.txt文件看对应关系。比如我的chrome是v62,支持的chromedriver是v2.33。
  3. 将安装程序拖到C:\Program Files (x86)\Google\Chrome\Application\目录下
  4. 设置环境变量:win+r,输入sysdm.cpl,高级,环境变量,设置Path为C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe。或者在调用chrome时指定这个路径。
    browser = webdriver.Chrome(‘C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe’)
  5. 使用selenium自动操作网页:
from selenium import webdriveroptions = 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(chrome_options=options)
driver.get('https://www.baidu.com/')
html = driver.page_source

完整代码

# contents_bdwk.py
from selenium import webdriver
from bs4 import BeautifulSoup# ***selenium 自动操作网页***
options = webdriver.ChromeOptions()
options.add_argument('user-agent="Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"')   #设置设备代理
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html')    #此处填写文章地址
page = driver.find_element_by_xpath("//div[@id='html-reader-go-more']")
driver.execute_script('arguments[0].scrollIntoView();', page)               #拖动网页到可见的元素去
nextpage = driver.find_element_by_xpath("//span[@class='moreBtn goBtn']")
nextpage.click()                                                            #进行点击下一页操作# ***对打开的html进行分析***
html = driver.page_source
bf1 = BeautifulSoup(html, 'lxml')# 获得文章标题
title = bf1.find_all('h1', class_='reader_ab_test with-top-banner')
bf2 = BeautifulSoup(str(title), 'lxml')
title = bf2.find('span')
title = title.get_text()
filename = title + '.txt'# 获得文章内容
texts_list = []
result = bf1.find_all('div', class_='ie-fix')
for each_result in result:bf3 = BeautifulSoup(str(each_result), 'lxml')texts = bf3.find_all('p')for each_text in texts:texts_list.append(each_text.string)
contents = ''.join(texts_list).replace('\xa0', '')# ***保存为.txt文件
with open(filename, 'a', encoding='utf-8') as f:f.writelines(contents)f.write('\n\n')

Python网络爬虫(七):百度文库文章爬取器相关推荐

  1. Python网络爬虫(九):爬取顶点小说网站全部小说,并存入MongoDB

    前言:本篇博客将爬取顶点小说网站全部小说.涉及到的问题有:Scrapy架构.断点续传问题.Mongodb数据库相关操作. 背景: Python版本:Anaconda3 运行平台:Windows IDE ...

  2. 爬虫python爬取页面请求_03 Python网络爬虫第三弹《爬取get请求的页面数据》,urllib...

    一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...

  3. python网络爬虫:股票数据定向爬取

    百度股票(https://gupiao.baidu.com/stock/)属于静态网页数据,适合定向数据爬取:新浪股票(http://finance.sina.com.cn/stock/)数据存取在j ...

  4. Python网络爬虫3 - 生产者消费者模型爬取某金融网站数据

    博客首发于www.litreily.top 应一位金融圈的朋友所托,帮忙写个爬虫,帮他爬取中国期货行业协议网站中所有金融机构的从业人员信息.网站数据的获取本身比较简单,但是为了学习一些新的爬虫方法和技 ...

  5. Python网络爬虫:利用正则表达式方法爬取‘’豆瓣读书‘’中‘’新书速递‘’条目

    1.简述:正则表达式是爬虫的方法之一,这里利用Requests库进行爬取,尽管Urllib也能进行爬取,但过程过于繁琐,在了解Urllib的爬取过程后,没有进行实战演练,但在学习了Requests的爬 ...

  6. Python网络爬虫,Appuim+夜神模拟器爬取得到APP课程数据

    一.背景介绍 随着生产力和经济社会的发展,温饱问题基本解决,人们开始追求更高层次的精神文明,开始愿意为知识和内容付费.从2016年开始,内容付费渐渐成为时尚. 罗辑思维创始人罗振宇全力打造" ...

  7. Python网络爬虫之基本项目:爬取网易新闻排行榜

    1. 最基本的抓取 抓取大多数情况属于get请求,即直接从对方服务器上获取数据. 首先,Python中自带urllib及urllib2这两个模块,基本上能满足一般的页面抓取.另外,requests也是 ...

  8. 利用Python进行百度文库内容爬取(二)——自动点击预览全文并爬取

    本文是衔接上一篇:<利用Python进行百度文库内容爬取(一)>. 上回说到我们在对百度文库进行爬虫时,需要模拟手机端来进行登录,这样固然可以对文章进行爬取,但是很多时候并不是非常智能的翻 ...

  9. Python新手爬虫训练小项目《爬取彼岸图网》(超详细讲解版)

    Python新手爬虫训练小项目<爬取彼岸图网>(超详细讲解版) 这是我的第一篇文章,作为一名新手爬虫,这个算是我这几天来的努力成果,虽然代码寥寥几行但花费了大半天,新手上路还是不能只看视频 ...

最新文章

  1. 都2020年,开发制作微信小程序商城,需要准备什么资料?应该不会不知道吧!
  2. 初识Service Worker
  3. Ubuntu系统的安装
  4. Linux学习:文件描述符表
  5. C++11新特性- for语句
  6. Linux管理磁盘配额
  7. FD.io——助你创新更高效、更灵活的报文处理方案
  8. 软考中级-数据库系统工程师复习知识点汇总
  9. pyraformer: low-complexity pyramidal attention for long-range time series modeling and forecasting
  10. html5ify插件,漂亮的jQuery对话框插件Dialogify
  11. python中时间模块datetime总结
  12. win10系统vs2019 mpich配置
  13. 微信小程序_文档_08_组件_媒体组件_地图_画布_开放能力
  14. 如何规划、建设你的数据库架构
  15. macbarcode软件_条形码生成器 for mac-条形码生成器 mac版下载V17.0__西西软件下载
  16. 计算机基础课教学计划,计算机基础(教学计划)
  17. ACS服务器的备份和恢复
  18. Cocos状态机与缓动系统
  19. ORACLE使用中的常见、实用的问题
  20. 次梯度(坐标法)、迭代加权最小二乘、ADMM求解Lasso

热门文章

  1. Sql Server 生成 Word 文档 表结构
  2. 微信号名称乱码什么情况_微信号改成什么好?
  3. 根据经纬度计算指定范围内或者附近的人(java)
  4. asterisk拨号规则(包含匹配规则说明)转
  5. The Fed's Market Footprint
  6. 20189230杨 2018-2019-2 《密码与安全新技术专题》第3周作业
  7. 水滴动态IP:一篇文章告诉你,IP地址是如何划分的
  8. tampermonkey自动化学习(持续更新~)
  9. 出色不如走运全文第二部分
  10. 宽带猫拨号报错651,虚惊一场