首页 > 其他分享 >自动化爬取Behance网站上的项目链接(优化版)

自动化爬取Behance网站上的项目链接(优化版)

时间:2023-10-07 14:16:11浏览次数:37  
标签:links keyword stop 爬取 Behance 链接

### 代码功能

此代码的主要目的是自动化爬取Behance网站上的项目链接。

1. **多关键词搜索**: 用户可以一次性输入多个关键词,程序会为每个关键词爬取指定数量的项目链接。
2. **自动滚动页面**: 使用Selenium模拟浏览器操作,程序能自动地滚动页面以获取更多的链接。
3. **命令行界面交互**: 代码允许用户在运行时实时与之交互,输入`stop`指令以跳过某个关键词的爬取。

### 达成的目的:

1. **高效率**: 该程序自动化了浏览并从Behance爬取项目链接的过程,避免了手动搜索和复制链接的繁琐。
2. **灵活性**: 用户可以按需选择要爬取链接的关键词和数量,还可以随时停止爬取过程。

### 使用注意事项:

1. **环境准备**: 在运行此代码之前,确保您已正确安装了Selenium库和ChromeDriver。
2. **登录Behance**: 当程序运行并打开浏览器后,首先针对第一个关键词进行搜索。在这一阶段,您可以手动登录Behance(如果需要),然后输入`stop`继续爬取进程。
3. **文件保存路径**: 当询问文件夹路径时,确保输入一个有效的目录路径。如果目录不存在,程序会为您创建它。

### 容易出错的地方:

1. **Selenium环境**: 如果您没有正确设置Selenium和ChromeDriver,代码会出错。确保两者都已正确安装和配置。
2. **网页结构改变**: Behance的网页结构可能会变化。如果这发生,CSS选择器可能不再有效,需要更新代码以适应新的结构。
3. **请求限制**: 如果短时间内发送了太多请求,Behance可能会限制您的IP地址。确保不要过于频繁地运行此程序。
4. **滚动延迟**: 设置的滚动延迟(当前为3秒)可能不适用于所有计算机和网络速度。太快的滚动可能导致新的内容没有足够的时间加载,而太慢的滚动会浪费时间。

 


 

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import threading
import os

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
break

def get_behance_links(driver, url, target_count):
links = set()
driver.get(url)
time.sleep(5) # 初始加载页面需要一些时间

no_new_links_duration = 0

try:
while len(links) < target_count and not stop_current_keyword:
previous_link_count = len(links)

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)

if len(links) == previous_link_count:
no_new_links_duration += 3 # 更新没有新链接的持续时间
else:
no_new_links_duration = 0

if no_new_links_duration >= 10:
break

if len(links) < target_count:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3) # 每3秒拉动页面一次
except Exception as e:
print(f"Error: {e}")

return list(links)

if __name__ == "__main__":
keywords = [
"washing machine",
"refrigerator",
# ... 更多关键词 ...
]

target_links_count = int(input("请输入您想要爬取的链接数量:"))

directory = input("请输入保存链接的文件夹路径(例如:C:/Users/YourName/Desktop/behance产品链接/):").strip()
directory = directory.replace("\\", "/")
if not directory.endswith("/"):
directory += "/"
if not os.path.exists(directory):
os.makedirs(directory)

thread = threading.Thread(target=input_thread)
thread.start()

driver = webdriver.Chrome()

try:
for index, keyword in enumerate(keywords):
stop_current_keyword = False

safe_keyword = keyword.replace("/", "_").replace("\\", "_")
search_url = f"https://www.behance.net/search/projects?search={keyword}&field=industrial+design"

if index == 0:
driver.get(search_url)
print(f"Crawling for keyword '{keyword}'. Input 'stop' when you're ready to move to the next keyword.")
while not stop_current_keyword:
time.sleep(1)
else:
links = get_behance_links(driver, search_url, target_links_count)
filename = os.path.join(directory, f"{safe_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()

标签:links,keyword,stop,爬取,Behance,链接
From: https://www.cnblogs.com/zly324/p/17746130.html

相关文章

  • Python爬虫源码,Behance 作品图片及内容采集爬虫附工具脚本!
    Behance网站是设计师灵感必备网站这个网站跟国内的网站,花瓣网很像,甚至可以说花瓣学习了它不少,在瀑布流网页的展示上也有很多相似之处。前面本渣渣就分享过花瓣网图片采集爬虫,感兴趣可以移步查看,现在还能用!【爬虫】花瓣图片爬虫,Python图片采集下载源码Python爬虫tkinter,花瓣工业设......
  • 有关于Mysql的简单问题及示例(增删改查 一对一 多对多 左外连接 右外链接)
    Mysql1、请自行设计表并针对该表练习最基本的增删改查且写出示例代码建立表格class其中有属性nameidgenderinterest表格建立完成向表中插入数据插入数据完成尝试删除表中id=101的数据删除数据成功尝试修改表中id为102的数据修改成功2、请问什么是一对多?请自......
  • 爬取behance搜索结果图片背后详情页的链接
    目的:我需要搜索多个behance结果,如“washingmachine","refrigerator"等,把结果下详情页高清大图都下载到本地。这样我就获得了“冰箱”的大量高清图。程序作用:爬取多个搜索结果下的详情页链接,并新建文件后保存在桌面txt文件中,如“washingmachine.txt”中。后期把txt中的文本可以放......
  • [CPP] CPP的编译链接过程
    手写的源代码本质上只是一串文本,但是在编译器里点一下编译就可以直接看到程序的输出,从文本到执行输出之间发生了什么 源代码到可执行程序大致经历以下几个过程         1、预编译(Preprocessing)预编译阶段主要做四件事:头文件展开,宏替换,执行预编译......
  • 链接 protobuf 就崩溃
    跟着官网的Demo试验了一下,发现跑起来就Abort了,下面是具体的报错terminatecalledafterthrowinganinstanceof'std::system_error'what():Unknownerror-1Aborted(coredumped)通过不停的删减代码和修改编译命令,定位到链接了protobuf就会崩溃。从GitHub搜索到......
  • Python爬虫源码,Behance 作品图片及内容 selenium 采集爬虫
    前面有分享过requests采集Behance作品信息的爬虫,这篇带来另一个版本供参考,使用的是无头浏览器selenium采集,主要的不同方式是使用selenium驱动浏览器获取到页面源码,后面获取信息的话与前篇一致。Python爬虫源码,Behance作品图片及内容采集爬虫附工具脚本!理论上,几乎所有的页面内......
  • 批量爬取多分页多张图片
    importurllib.requestfromlxmlimportetree#https://sc.chinaz.com/tupian/siwameinvtupian.htmlurl='https://sc.chinaz.com/tupian/siwameinvtupian_2.html'defgetTenGirlPhote(page):headers={'User-Agent':'Mozil......
  • 代码链接与实践截图
    include<fcntl.h>include<unistd.h>intmain(){intfile_desc=open("test.txt",O_RDONLY);if(file_desc<0){//错误处理}//进行其他操作...close(file_desc);return0;}include<fcntl.h>include<unistd.h>intmain(){c......
  • 爬取豆瓣电影,保存到json文件中
    importurllib.requesturl='https://movie.douban.com/j/chart/top_list?type=5&interval_id=100%3A90&action=&start=0&limit=20'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537......
  • 爬虫记录~(多线程爬取图片)
    使用Requests+Re库方法多线程爬取亚马逊商城商品图片,以关键词“书包”搜索页面的商品的图片,爬取0-2页面商品图片。关键词:多线程爬虫程序、商城网站的遍历,链接的查找和访问。巩固搜索接口和翻页处理。importrequestsfromfake_useragentimportUserAgentimportrefrommulti......