Python爬虫:批量下载B站搜索页面的图片
python/nimport re/nimport requests/nimport time/nfrom selenium.webdriver.common.by import By/nfrom bs4 import BeautifulSoup/nimport os/nfrom selenium import webdriver/nfrom selenium.webdriver.chrome.service import Service/nfrom selenium.webdriver.chrome.options import Options/nfrom urllib.parse import urlparse, urljoin/n/nRUNNING_MODE = 1 # 将运行模式设置为1/n/n# 设置要抓取的文章URL/narticle_url = 'https://www.bilibili.com/read/cv3094491/?from=search&spm_id_from=333.337.0.0'/n/n# 设置要抓取的页面URL(根据需要更改)/npage_url = 'https://search.bilibili.com/article?keyword=饭拍图&page=2'/n/n# 指定保存路径和WebDriver路径/nsave_path = 'bilibili1'/nwebdriver_path = '/Users/geeds/Desktop/Work/Python/ZcoolDL/chromedriver'/n/n# 如果目录不存在,则创建保存目录/nif not os.path.exists(save_path):/n os.makedirs(save_path)/n/n# 设置Chrome WebDriver选项/nchrome_options = Options()/nchrome_options.add_argument('--disable-gpu')/nchrome_options.add_argument('--disable-dev-shm-usage')/nchrome_options.add_argument('--disable-extensions')/nchrome_options.executable_path = webdriver_path # 在此处设置executable_path/n/n# 创建Chrome WebDriver/ndriver = webdriver.Chrome(options=chrome_options)/n/n/n# 从给定的URL抓取并下载图像的函数/ndef scrape_and_download_images(url, 文件夹):/n driver.get(url)/n time.sleep(3) # 等待页面加载/n/n # 使用BeautifulSoup解析页面/n soup = BeautifulSoup(driver.page_source, 'html.parser')/n image_elements = soup.find_all('img', {'data-src': True})/n/n # 从页面下载图像/n for img_idx, img in enumerate(image_elements):/n image_url = img['data-src']/n/n # 检查URL是否以//开头,如果是,则添加https:以使其成为有效的URL/n if image_url.startswith('//'):/n image_url = 'https:' + image_url/n/n filename = f'image_{img_idx + 1}.jpg' # 如有需要,您可以自定义文件名/n save_file_path = os.path.join(文件夹, filename)/n/n if os.path.exists(save_file_path):/n print(f'[{img_idx + 1}/{len(image_elements)}] 图像已存在,跳过下载。路径:{save_file_path}')/n else:/n try:/n with open(save_file_path, 'wb') as f:/n response = requests.get(image_url)/n f.write(response.content)/n print(f'[{img_idx + 1}/{len(image_elements)}] 下载图像:{filename}。保存路径:{save_file_path}')/n except requests.RequestException as e:/n print(f'请求错误:{e}')/n print('等待十秒后重试...')/n time.sleep(10)/n continue/n/n/n# 从文章URL抓取并下载图像/nscrape_and_download_images(article_url, save_path)/n/n# 初始化页面编号/npage_number = 2/n/n# 循环下载每页图片/nwhile True:/n # 更新页面URL/n page_url = re.sub(r'page=/d+', f'page={page_number}', page_url)/n/n # 从页面URL抓取并下载图像/n scrape_and_download_images(page_url, save_path)/n/n # 退出WebDriver/n driver.quit()/n/n # page+1/n page_number += 1/n/n # 创建新的WebDriver/n driver = webdriver.Chrome(options=chrome_options)/n/n# 退出循环/n/n/n代码解释:/n/n1. 循环下载: 代码使用 while True 循环来不断下载新的页面图片。/n2. 更新页面URL: 每次循环开始前,使用 re.sub 函数更新 page_url 中的页面编号。/n3. 创建新的WebDriver: 由于 driver.quit() 会关闭浏览器,因此需要在每次循环开始前重新创建新的 WebDriver 对象。/n/n注意:/n/n* 为了避免被 B 站封锁,建议您在每次请求之间添加一定的延迟,例如使用 time.sleep(1)。/n* 请根据实际情况修改 article_url 和 webdriver_path 的值。/n* 该代码仅供参考,您可能需要根据具体情况进行修改。/n
原文地址: https://www.cveoy.top/t/topic/hHZ0 著作权归作者所有。请勿转载和采集!