用Python+Selenium下载网盘特定标题的PDF文件

2023-06-05 14:27:44 浏览数 (3)

亿牛云代理亿牛云代理

我想要从百度云网盘上下载一些有特定标题的PDF文件,用来做数据分析。但是百度云网盘的下载速度很慢,而且有些文件需要付费才能下载。所以我决定用Python和Selenium来写一个爬虫程序,自动化地搜索和下载我想要的文件。为了防止被百度云网盘检测到,我还使用了代理IP来隐藏我的真实IP地址。这样,我就可以快速地获取我需要的数据,代码如下:

代码语言:python代码运行次数:0复制
# 导入selenium库
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 亿牛云 爬虫代理加强版 设置代理IP认证信息
proxy_username = "16YUN"
proxy_password = "16IP"

# 亿牛云 爬虫代理加强版 设置代理IP认证信息
proxy_ip = "www.16yun.cn"
proxy_port = "31000"

# 创建一个Chrome选项对象
options = webdriver.ChromeOptions()

# 添加代理IP的参数
options.add_argument(f"--proxy-server=http://{proxy_username}:{proxy_password}@{proxy_ip}:{proxy_port}")

# 创建一个Chrome浏览器对象,并传入选项对象
driver = webdriver.Chrome(options=options)

# 打开百度云网盘网页
driver.get("https://pan.baidu.com/")

# 等待页面加载完成
wait = WebDriverWait(driver, 10)

# 找到登录按钮并点击
login_button = wait.until(EC.element_to_be_clickable((By.ID, "TANGRAM__PSP_4__footerULoginBtn")))
login_button.click()

# 输入百度云盘的用户名和密码并登录(请替换为你自己的用户名和密码)
username = "your_username"
password = "your_password"
username_input = wait.until(EC.visibility_of_element_located((By.ID, "TANGRAM__PSP_4__userName")))
password_input = wait.until(EC.visibility_of_element_located((By.ID, "TANGRAM__PSP_4__password")))
username_input.send_keys(username)
password_input.send_keys(password)
submit_button = wait.until(EC.element_to_be_clickable((By.ID, "TANGRAM__PSP_4__submit")))
submit_button.click()

# 等待登录成功
wait.until(EC.title_contains("百度网盘"))

# 找到搜索框并输入要下载的PDF文件的标题(请替换为你想要的标题)
title = "your_title"
search_input = wait.until(EC.visibility_of_element_located((By.ID, "searchInput")))
search_input.send_keys(title)

# 点击搜索按钮
search_button = wait.until(EC.element_to_be_clickable((By.ID, "searchBtn")))
search_button.click()

# 等待搜索结果出现
wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "file-name")))

# 找到第一个匹配的PDF文件并点击
pdf_files = driver.find_elements_by_css_selector(".file-name .file-name-text")
for pdf_file in pdf_files:
    if pdf_file.text.endswith(".pdf"):
        pdf_file.click()
        break

# 点击下载按钮
download_button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, "g-button-download")))
download_button.click()

# 关闭浏览器
driver.quit()

0 人点赞