# 目标网站的URL url = "https://www.sucai999.com/pic/cate/263_460.html" # 发起请求并获取网页内容 response = requests.get(url) html_content = response.text # 创建BeautifulSoup对象 soup = BeautifulSoup(html_content, "html.parser") # 创建保存图片的文件夹 if not os.path.exists("images"): os.makedirs("images") # 计数器,用于限制爬取的图片数量 count = 5 # 查找所有的图片标签 image_tags = soup.find('a', class_='getword').find_all('img',class_='img1') print(image_tags) # 遍历图片标签,并下载图片 for img in image_tags: # 获取图片链接 img_url = img["data-src"] # 发起请求并获取图片内容 img_response = requests.get(img_url) # 保存图片到本地 with open(f"images/image{count}.jpg", "wb") as f: f.write(img_response.content) count += 1 # 爬取10张图片后停止 if count == 100: break print("爬取完成!")为什么这段代码只能爬取一张图片,请优化代码
时间: 2024-04-07 13:30:36 浏览: 14
这段代码只能爬取一张图片的原因是因为在查找图片标签时了`find`方法,该方法只返回第匹配到的元素。如果你想要取多张图片,可以`find_all`方法来获取所有匹配的图片标签。
下面是优化后的代码```python
import requests
from bs4 import BeautifulSoup
import os
# 目标网站的URL
url = "https://www.sucai999.com/pic/cate/263_460.html"
# 发起请求并获取网页内容
response = requests.get(url)
html_content = response.text
# 创建BeautifulSoup对象
soup = BeautifulSoup(html_content, "html.parser")
# 创建保存图片的文件夹
if not os.path.exists("images"):
os.makedirs("images")
# 计数器,用于限制爬取的图片数量
count = 0
# 查找所有的图片标签
image_tags = soup.find_all('a', class_='getword')[1:]
print(image_tags)
# 遍历图片标签,并下载图片
for img in image_tags:
# 获取图片链接
img_url = img.find('img', class_='img1')["data-src"]
# 发起请求并获取图片内容
img_response = requests.get(img_url)
# 保存图片到本地
with open(f"images/image{count}.jpg", "wb") as f:
f.write(img_response.content)
count += 1
# 爬取10张图片后停止
if count == 10:
break
print("爬取完成!")
```
在优化后的代码中,我使用了`find_all`方法来获取所有匹配的图片标签,并使用切片操作`[1:]`去掉了第一个标签,因为第一个标签是网站的Logo,并不是需要爬取的图片。然后在遍历图片标签时,通过`img.find('img', class_='img1')`来获取每个标签中的图片链接。
这样你就可以成功爬取多张图片了。如果你想要爬取更多的图片,可以将计数器`count`的值调大。记得在实际爬取过程中要遵守相关法律法规和目标网站的规定。