网页视频抓取工具 知乎( 2020年10月28日09:17:41文中通过示例代码介绍)

优采云 发布时间: 2022-02-02 14:18

  网页视频抓取工具 知乎(

2020年10月28日09:17:41文中通过示例代码介绍)

  python如何使用selenium爬虫的例子知乎

  更新时间:2020-10-28 09:17:41 作者:宇智波间桐鸣人

  本文章主要介绍python使用selenium爬虫知乎的方法示例。文章中对示例代码进行了非常详细的介绍,对大家的学习或工作有一定的参考和学习价值。需要的朋友如下 快来跟我一起学习

  说到爬虫,大家想到的一般情况是,在python中,通过requests库获取网页的内容,然后通过beautifulSoup过滤文档中的标签和内容。但是这样做有一个问题,很容易被防摘机制阻止。

  有很多反爬机制,比如知乎:一开始只加载几个问题,向下滚动时会继续加载到底部,向下滚动一定距离时,会出现一个将出现登录弹出窗口。框架。

  这样的机制限制了爬虫获取服务器返回内容的方式。我们只能得到前几个答案,但没有办法得到后面的答案。

  所以需要用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爬虫知乎,请搜索脚本之家k7@之前的或继续浏览以下相关文章希望大家以后多多支持脚本之家!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线