一个爬取网络图片的小爬虫(含代码)(requests,bs4)

爬取高清的电脑壁纸(requests,bs4)

爬取优美图库的壁纸,本次的爬虫我分为三个大步骤:
1、拿到主页面的源代码,然后提取到子页面的链接href
2、通过href拿到子页面的内容,从子页面中找到图片的下载地址img->src
3、下载图片
第一部分:查看网页的源代码,然后提取子页面的链接href
在这里插入图片描述在这里插入图片描述
找到子页面的链接的位置
第一部分主要代码如下:

url = "https://www.umei.cc/bizhitupian/weimeibizhi/"
resp = requests.get(url)
resp.encoding = "utf-8"#处理乱码

#将源代码交给beautifulsoup
main_page = BeautifulSoup(resp.text,"html.parser")
alist = main_page.find("ul",attrs={"class":"pic-list after"}).find_all("a")
# print(alist)
for a in alist:
    href = "https://www.umei.cc"+a.get("href")#直接通过get就可以拿到属性值
    print(href)

第二部分:通过href拿到子页面的内容,从子页面中找到图片的下载地址img->src
在这里插入图片描述
第二部分的主要代码

for a in alist:
    href = "https://www.umei.cc"+a.get("href")#直接通过get就可以拿到属性值
    #print(href)
    child_resp = requests.get(href)
    child_resp.encoding = "utf-8"
    child_page = BeautifulSoup(child_resp.text,"html.parser")
    img = child_page.find("section",class_="img-content").find("img")
    #print(img.get("src"))
    src = img.get("src")

其第三部分就是通过图片的链接,将图片保存下来
全部代码如下:

# 1、拿到主页面的源代码,然后提取到子页面的链接href
# 2、通过href拿到子页面的内容,从子页面中找到图片的下载地址img->src
# 3、下载图片


import requests
from bs4 import BeautifulSoup
import time

url = "https://www.umei.cc/bizhitupian/weimeibizhi/"
resp = requests.get(url)
resp.encoding = "utf-8"#处理乱码

#将源代码交给beautifulsoup
main_page = BeautifulSoup(resp.text,"html.parser")
alist = main_page.find("ul",attrs={"class":"pic-list after"}).find_all("a")
# print(alist)
for a in alist:
    href = "https://www.umei.cc"+a.get("href")#直接通过get就可以拿到属性值
    #print(href)
    child_resp = requests.get(href)
    child_resp.encoding = "utf-8"
    child_page = BeautifulSoup(child_resp.text,"html.parser")
    img = child_page.find("section",class_="img-content").find("img")
    #print(img.get("src"))
    src = img.get("src")
    #下载图片
    img_resp = requests.get(src)
    img_resp.content#这里拿到的是字节
    img_name = src.split("/")[-1]#给图片的名字(url的最后一部分)
    with open("img/"+img_name,mode="wb") as f:
        f.write(img_resp.content)#将图片的内容写入文件
    
    print("over!",img_name)
    time.sleep(1)

结果展示:
在这里插入图片描述
在这里插入图片描述

<think>好的,我现在需要帮用户提供一个Python爬取网页图片代码示例。用户已经给出了三个引用,我需要先理解这些引用的内容,然后结合它们来生成合适的回答。 首先,引用[1]提到的是如何抓取网页上的所有图片链接,并提到了实战代码示例。引用[2]则指出实际应用中可能遇到的问题,比如JavaScript生成的内容、编码问题、频率限制,以及遵守robots.txt的重要性。引用[3]给出了具体的代码示例,使用了urllib.request.urlretrieve来下载图片。 接下来,用户的需求是获取用于爬取网页图片Python代码示例。需要确保代码结构清晰,并且符合用户的要求,比如使用requests和BeautifulSoup,可能需要处理不同的情况。 我应该先检查用户提供的引用中的代码是否存在潜在问题,或者是否有更好的实现方式。例如,引用[3]中的代码可能没有处理相对URL的情况,或者没有设置请求头导致被网站拒绝。此外,用户可能需要处理异常和遵守robots.txt,如引用[2]所提到的。 然后,我需要组织代码的结构,确保导入必要的库,发送请求,解析HTML,提取图片链接,处理相对路径,下载图片,并保存到本地。同时,要添加User-Agent头,以模拟浏览器访问,避免被拒绝。还需要处理可能的异常,比如请求错误或无效的URL。 另外,用户可能希望代码有详细的注释,便于理解每一步的作用。比如,解释BeautifulSoup如何找到所有img标签,如何拼接完整的URL,以及保存图片的过程。 最后,生成相关问题时要围绕爬虫的扩展应用、反爬措施、图片处理等方面,帮助用户进一步学习。 现在,综合这些考虑,我需要编写一个符合要求的Python代码示例,并确保代码正确、健壮,同时附上相关的问题供用户参考。</think>以下是一个使用Python爬取网页图片的完整代码示例,结合`requests`和`BeautifulSoup`实现,包异常处理和路径处理: ```python import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin def download_images(url, save_dir='images'): # 创建保存目录 os.makedirs(save_dir, exist_ok=True) try: # 设置请求头模拟浏览器访问 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } # 发送HTTP请求 response = requests.get(url, headers=headers) response.raise_for_status() # 检查请求状态 # 解析HTML内容 soup = BeautifulSoup(response.text, 'html.parser') # 查找所有img标签 img_tags = soup.find_all('img') # 下载图片 for img in img_tags: img_url = img.get('src') if not img_url: continue # 处理相对路径 full_url = urljoin(url, img_url) # 获取文件名 filename = os.path.join(save_dir, os.path.basename(full_url)) # 下载并保存图片 try: img_data = requests.get(full_url, headers=headers).content with open(filename, 'wb') as f: f.write(img_data) print(f'下载成功: {filename}') except Exception as e: print(f'下载失败 {full_url}: {e}') except requests.exceptions.RequestException as e: print(f'请求失败: {e}') # 使用示例 if __name__ == "__main__": target_url = 'https://example.com' # 替换为目标网址 download_images(target_url) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值