python selenium爬虫保存_python 使用 selenium爬虫知乎回答 并保存为csv文件

该博客介绍了如何使用Python的Selenium库爬取知乎问题的回答,并将其保存为CSV文件。首先,详细解释了Selenium库的作用和安装方法,接着讲解了Pandas库的功能和安装。然后,提供了完整的Python代码示例,包括打开浏览器,滚动到底部,获取回答、作者ID和日期等信息,并将这些信息存储为DataFrame,最后导出为CSV文件。代码还包含了处理登录弹窗的机制,使用XPath定位元素进行双击关闭。
摘要由CSDN通过智能技术生成

实现效果

关于selenium库

用途:

模拟人工打开浏览器并进行一些操作,类似于手机上的连点器和脚本,可以有效的解决弹窗类的反扒机制。

使用:

pip 安装 ,下载浏览器驱动 ,给驱动配置环境 ,重启pycharm测试。

关于panda库

用途:

将字典转换成dataframe并更以csv的形式导出。

使用:

pip 安装即可。

代码

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

from pandas.core.frame import DataFrame

option = webdriver.ChromeOptions()

option.add_argument("headless")

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

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

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())

# 点击空白关闭登陆窗口

ac = driver.find_element_by_xpath('//body/div[4]/div[1]/div[1]/div[1]/div[2]/button[1]/*[1]')

ActionChains(driver).move_to_element(ac).double_click(ac).perform()

# 当滚动到底部时

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

# 获取回答

answerElementArr = driver.find_elements_by_css_selector('.RichContent-inner') # .List-item

# 获取id

idElementArr = driver.find_elements_by_css_selector('div.AuthorInfo-head > span.UserLink') # .List-item

# 获取日期

dateElementArr = driver.find_elements_by_css_selector('.ContentItem-time') # .List-item

# 获取标题

title = driver.find_element_by_class_name('QuestionHeader-title')

filename = title.text

# 创建list

a = []

b = []

c = []

# id写入

for uid in idElementArr:

a.append(uid.text)

# 答案写入

for answer in answerElementArr:

b.append(answer.text)

# date写入

for date in dateElementArr:

c.append(date.text)

# 将列表转换成字典

d = {"id": a, "answer": b, "date": c}

# 创建 Dataframe

dateframe = DataFrame(d)

# 到出 csv文件

dateframe.to_csv("./{}.csv".format(title.text),index=False)

print(len(answerElementArr))

print(len(idElementArr))

print(len(dateElementArr))

print('爬取问题 ' + title.text + str(len(answerElementArr)) + ' 条,存入到csv文件中')

finally:

driver.close() # close the driver

这套代码是在  python 使用 selenium 爬虫知乎 的基础上进行了完善,将自动关闭登陆窗的机制改为xpath定位元素双击,然后自动向下滑动,并将结果以csv的形式写入方便以后进行数据处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值