说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容。但是这样有个问题就是,容易被反扒机制所拦住。

反扒机制有很多种,例如知乎:刚开始只加载几个问题,当你往下滚动时才会继续往下面加载,而且在往下滚动一段距离时就会出来一个登陆的弹框。

这样的机制对于通过获取服务器返回内容的爬虫方式进行了限制,我们只能获得前几个回答,而没办法或许后面的回答。

所以需要使用 selenium 模拟真实浏览器进行操作。

最终实现效果如下:

前提是需要自行搜索教程安装:

chromeDriver

selenium 库

想要使用下面代码的可以直接修改 driver.get() 里的地址,然后爬取结果最终会存在message.txt文件中

代码如下:

from selenium import webdriver # 从selenium导入webdriver

from selenium.webdriver.common.by import By # 内置定位器策略集

from selenium.webdriver.support.wait import WebDriverWait # 用于实例化一个Driver的显式等待

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.action_chains import ActionChains

import time

option = webdriver.ChromeOptions()

option.add_argument("headless")

driver = webdriver.Chrome() # chrome_options=option 这个参数设置之后可以隐藏浏览器

driver.get('https://www.zhihu.com/question/22110581') #修改这里的地址

file = open("./messages.txt", "w")

def waitFun():

js = """

let equalNum = 0;

window.checkBottom = false;

window.height = 0;

window.intervalId = setInterval(()=>{

let currentHeight = document.body.scrollHeight;

if(currentHeight === window.height){

equalNum++;

if(equalNum === 2){

clearInterval(window.intervalId);

window.checkBottom = true;

}

}else{

window.height = currentHeight;

window.scrollTo(0,window.height);

window.scrollTo(0,window.height-1000);

}

},1500)"""

# 这个暂停一下是因为要等待页面将下面的内容加载出,这个 1500 可以根据自己的网络快慢进行适当的调节

# 这里需要往上移动一下,因为不往上移动一下发现不会加载。

driver.execute_script(js)

# selenium 可以获取 浏览器中 js 的变量。调用的js return

def getHeight(nice):

# 这里获取 js 中的 checkBottom 变量,作为到底部时进行停止。

js = """

return window.checkBottom;

"""

return driver.execute_script(js)

try:

# 先触发登陆弹窗。

WebDriverWait(driver, 40, 1).until(EC.presence_of_all_elements_located(

(By.CLASS_NAME, 'Modal-backdrop')), waitFun())

# 点击空白关闭登陆窗口

ActionChains(driver).move_by_offset(200, 100).click().perform()

# 当滚动到底部时

WebDriverWait(driver, 40, 3).until(getHeight, waitFun())

# 获取回答

answerElementArr = driver.find_elements_by_css_selector('.RichContent-inner')

for answer in answerElementArr:

file.write('==================================================================================')

file.write('\n')

file.write(answer.text)

file.write('\n')

print('爬取成功 '+ str(len(answerElementArr)) +' 条,存入到 message.txt 文件内')

finally:

driver.close() #close the driver

这套代码实现了打开知乎,然后自动向下滑动,当弹出登陆框时,自动点击左上角关闭登陆框。然后继续向下滑动,加载页面,直到滑动到底部。然后将内容写在 message.txt 文件里面。

selenium 功能非常强大, 可以模拟人为在浏览器的操作,进行输入、点击、滑动、播放、暂停等等操作,因此也可以用来写一些脚本,用来刷学时,抢课等等。

到此这篇关于python使用selenium爬虫知乎的方法示例的文章就介绍到这了,更多相关python selenium爬虫知乎内容请搜索python博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持python博客!

python selenium爬虫实例_python使用selenium爬虫知乎的方法示例相关推荐

  1. python处理pdf实例_python使用pdfminer解析pdf文件的方法示例

    最近要做个从 pdf 文件中抽取文本内容的工具,大概查了一下 python 里可以使用 pdfminer 来实现.下面就看看怎样使用吧. PDFMiner是一个可以从PDF文档中提取信息的工具.与其他 ...

  2. python求数字平均值_Python简单计算数组元素平均值的方法示例

    本文实例讲述了Python简单计算数组元素平均值的方法.分享给大家供大家参考,具体如下: Python 环境:Python 2.7.12 x64 IDE : Wing IDE Professional ...

  3. python辗转相除_Python基于辗转相除法求解最大公约数的方法示例

    Python基于辗转相除法求解最大公约数的方法示例 本文实例讲述了Python基于辗转相除法求解最大公约数的方法.分享给大家供大家参考,具体如下: 之前总结过一次高德纳TAOCP中的最大公约数求解,其 ...

  4. python实现加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  5. python如何加密字符串_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.分享给大家供大家参考,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安 ...

  6. python 字符串加密解密_Python实现对字符串的加密解密方法示例

    本文实例讲述了Python实现对字符串的加密解密方法.,具体如下: 需求是是要将密码存在数据库里,所以要加密解密是可逆的,在数据库里不要有特殊字符,防止数据库备份和恢复中出错. 安装PyCrypto, ...

  7. python 播放mp3模块_Python基于pygame模块播放MP3的方法示例

    1 IDLE1 1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用I 2018-04-14 为什么使用Python ...

  8. __init__在python中的用法知乎_python使用selenium爬虫知乎的方法示例

    说起爬虫一般想到的情况是,使用 python 中都通过 requests 库获取网页内容,然后通过 beautifulSoup 进行筛选文档中的标签和内容.但是这样有个问题就是,容易被反扒机制所拦住. ...

  9. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

最新文章

  1. linux 并行计算命令,Linux下的并行神器——parallel
  2. 皮尔·卡丹的管理思想精髓:从小做到大
  3. URG与PSH的联系和区别
  4. 从零开始学做微信小程序,看这些就够了!
  5. python modbus tk 库_python modbus_tk模块学习笔记(rtu slaver例程)
  6. Vue源码分析 - watcher.js
  7. java 通过网络 ntp 获取网络时间
  8. 2022年认证杯SPSSPRO杯数学建模C题(第二阶段)污水流行病学原理在新冠疫情防控方面的作用求解全过程文档及程序
  9. 省市县联动列表html代码,若依添加省市县联动三级菜单
  10. Android小心心动画
  11. js页面加载实现loading提示效果
  12. Prometheus+Grafana监控告警配置
  13. Springboot中对jpa动态查询条件的封装
  14. EOS 安装本地环境,发币教程,本地节点
  15. python 数值型字符串实现四舍五入 decimal_Python将科学计数法数值转换为指定精度浮点数...
  16. 电脑连蓝牙耳机,放音乐是用蓝牙耳机,浏览器不能用蓝牙耳机,用的扬声器,解决方案:
  17. 20220124英语学习
  18. 我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,稳的一批
  19. 分析 Android 耗电原理后,飞书是这样做耗电治理的
  20. 教师计算机培训重要性日志,2018教师信息技术应用能力提升专题培训研修日志...

热门文章

  1. 基于Android的校园新闻APP
  2. “第三次工业革命”的五大要素
  3. (CRON) info (No MTA installed, discarding output)
  4. HTTPS 加密算法过程
  5. html5 实现可拖拽移动的悬浮图标
  6. 使用wps2019去除pdf的水印
  7. 基于机智云物联网平台的智能种树小车
  8. 6-5 二叉树的层次遍历 (6分)_数据结构实验5_羊卓的杨
  9. 在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
  10. IN Tech 年度盘点|英特尔2021技术发展亮点