import os
from selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import time
import pandas as pd
from selenium.webdriver.common.action_chains import ActionChains
def get_aws():
# 如果 WebDriver 的路径没有被添加到系统的 PATH 环境变量中,需要指定它的路径
edge_driver_path = 'E:/sleep_lr/edgedriver_win64/msedgedriver.exe'
service = Service(edge_driver_path)
# # 创建 Edge 浏览器实例
driver = webdriver.Edge(service=service)
if not os.path.exists("cookies.pkl"):
driver.get("https://www.jianshu.com/")
input("ok")
pd.to_pickle(driver.get_cookies(), "cookies.pkl")
else:
driver.get("https://www.jianshu.com/")
driver.delete_all_cookies()
for cookie in pd.read_pickle("cookies.pkl"):
driver.add_cookie(cookie_dict=cookie)
#
# 打开一个网页
data=pd.read_pickle("jian_fen.pkl")
text_list=[]
for name, strs, like, url, one_str_price, get_like_str in data.values:
driver.get(url)
info=driver.find_elements(By.XPATH,'//div[@class="info"]/ul')[0].text
actions = ActionChains(driver)
# 先悬浮再点击
actions.move_to_element(driver.find_elements(By.XPATH, '//i[@class="iconfont ic-hot"]')[0]).click().perform()
time.sleep(5)
one=[o.text for o in driver.find_elements(By.XPATH,'//ul[@class="note-list"]/li')]
text_list.append([info,one])
print(one)
pd.to_pickle(text_list, "jian_shu1.pkl")
if __name__ == '__main__':
get_aws()
这段代码是一个使用 Python 语言编写的脚本,它使用了 Selenium 库来自动化操作网页浏览器,特别是 Microsoft Edge 浏览器。以下是代码的主要功能和步骤的解释:
- 引入所需的库:
os
:用于与操作系统交互,例如检查文件是否存在。selenium.webdriver.common.by.By
:用于定位网页元素。selenium.webdriver
:包含WebDriver的接口。selenium.webdriver.edge.service.Service
:用于启动Edge浏览器服务。time
:用于暂停脚本执行,以便等待网页加载或操作完成。pandas as pd
:用于数据处理和分析,这里主要用于序列化(保存)和反序列化(加载)cookie。selenium.webdriver.common.action_chains.ActionChains
:用于模拟更复杂的用户操作,如鼠标悬停和点击。
- 定义
get_aws
函数:- 这个函数负责启动浏览器、管理cookies、访问简书网站,并抓取特定文章的热门评论。
- 设置 Edge WebDriver:
- 定义
edge_driver_path
变量为 Edge WebDriver 的可执行文件路径。 - 创建一个
Service
对象,将 WebDriver 的路径传递给它。 - 创建一个
webdriver.Edge
实例,用于控制浏览器。
- 定义
- 管理 Cookies:
- 检查是否存在一个名为 “cookies.pkl” 的文件。如果不存在,则访问简书网站,并在用户登录后手动保存 cookies(通过
input("ok")
暂停执行)。 - 如果 “cookies.pkl” 文件存在,则加载 cookies,以便在浏览器中保持登录状态。
- 检查是否存在一个名为 “cookies.pkl” 的文件。如果不存在,则访问简书网站,并在用户登录后手动保存 cookies(通过
- 访问简书文章页面并抓取数据:
- 从 “jian_fen.pkl” 文件中读取包含文章信息的 DataFrame。
- 遍历 DataFrame 中的每一行,获取文章的 URL,并访问这些 URL。
- 在每个文章页面上,抓取文章信息(如阅读量、评论数等)和热门评论。
- 执行鼠标悬停和点击操作:
- 使用
ActionChains
对象模拟用户将鼠标悬停在热门评论图标上,并点击它以展开评论列表。
- 使用
- 等待并抓取评论:
- 等待5秒钟以允许评论加载。
- 抓取评论列表中的文本。
- 将抓取的信息保存到
text_list
中,并将这个列表序列化到 “jian_shu1.pkl” 文件中。
- 主程序入口:
- 当该脚本作为主程序运行时,调用
get_aws()
函数。
请注意,代码中有几个地方需要手动干预(例如,登录简书网站并保存 cookies),并且它依赖于外部文件(“cookies.pkl” 和 “jian_fen.pkl”)的存在。
此外,该脚本可能存在一些问题,例如缺少异常处理,以及硬编码的等待时间(time.sleep(5)
),这可能会导致脚本不稳定或效率低下。在使用此脚本之前,需要确保所有外部依赖项都正确设置,并且脚本在运行环境中经过充分测试。
- 当该脚本作为主程序运行时,调用