目的:我需要搜索多个behance结果,如“washing machine","refrigerator"等,把结果下详情页高清大图都下载到本地。这样我就获得了“冰箱”的大量高清图。
程序作用:爬取多个搜索结果下的详情页链接,并新建文件后保存在桌面txt文件中,如“washing machine.txt”中。后期把txt中的文本可以放进“豆皮文件下载器”中下载。
程序概述:
-
导入必要的库:
webdriver
:控制浏览器的操作。By
:用于定位页面元素。time
:用于添加延迟,保证页面加载完毕。threading
:用于并发操作,实现同时监听用户输入和爬取内容。
-
全局变量:
stop_current_keyword
:用于标志是否需要停止当前关键词的爬取操作。
-
函数:
input_thread
:一个后台线程,不断监听用户输入。当用户输入'stop'时,将全局变量stop_current_keyword
设为True。get_behance_links
:核心爬虫函数。给定一个 URL 和目标链接数量,它会返回一个链接列表。
-
主程序:
- 定义了一个关键词列表
keywords
。该列表包含了需要在 Behance 上搜索的关键词。 - 提示用户输入希望爬取的链接数量。
- 启动一个后台线程,该线程用于监听用户输入。
- 启动 Chrome 浏览器。
- 对于
keywords
列表中的每一个关键词,生成对应的 Behance 搜索 URL,并使用上述的get_behance_links
函数获取链接。 - 获取到链接后,将它们保存到一个以关键词命名的文本文件中。
- 最后,关闭 Chrome 浏览器
- 定义了一个关键词列表
标签:current,keyword,详情页,stop,links,爬取,behance,链接 From: https://www.cnblogs.com/zly324/p/17742379.html
# 导入必要的库
from selenium import webdriver # 用于控制浏览器
from selenium.webdriver.common.by import By # 用于定位元素
import time # 用于添加延迟
import threading # 用于并发操作
stop_current_keyword = False # 用于控制是否停止当前关键词的爬取
# 一个后台线程,监听用户输入
def input_thread():
global stop_current_keyword
while True:
cmd = input("Type 'stop' to skip current keyword: ")
if cmd == 'stop':
stop_current_keyword = True
# 这个函数用于爬取Behance网站上的链接
def get_behance_links(driver, url, target_count):
links = set()
driver.get(url)
time.sleep(5) # 等待页面加载
try:
# 当链接数量未达到目标数量,并且用户未停止当前关键词的爬取时
while len(links) < target_count and not stop_current_keyword:
# 查找页面上的所有链接元素
a_elements = driver.find_elements(By.CSS_SELECTOR,
".ProjectCoverNeue-coverLink-U39.e2e-ProjectCoverNeue-link")
for a in a_elements:
href = a.get_attribute("href")
if href:
links.add(href)
# 如果链接数量还未达到目标,并且用户还未输入'stop',则滚动页面以加载更多链接
if len(links) < target_count:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5) # 等待页面加载新的内容
except Exception as e:
print(f"Error: {e}")
return list(links)
if __name__ == "__main__":
keywords = [
"washing machine",
"refrigerator",
# ... 更多关键词 ...
]
target_links_count = int(input("请输入您想要爬取的链接数量:"))
# 开启监听用户输入的线程
thread = threading.Thread(target=input_thread)
thread.start()
driver = webdriver.Chrome() # 启动Chrome浏览器
try:
for keyword in keywords:
stop_current_keyword = False # 对于每一个关键词,都将标志位重置
search_url = f"https://www.behance.net/search/projects?search={keyword}&field=industrial+design"
links = get_behance_links(driver, search_url, target_links_count)
filename = f"{keyword}.txt"
with open(filename, 'w', encoding='utf-8') as f:
for link in links:
f.write(link + '\n')
print(f"已找到 {len(links)} 个链接并保存到 '{filename}'.")
if stop_current_keyword:
print(f"Skipped the rest of '{keyword}' on user command.")
finally:
driver.quit() # 关闭浏览器