通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python如何把图片扒下来

python如何把图片扒下来

Python可以通过多种方式将图片扒下来,比如使用requests库、BeautifulSoup库、Selenium库等。具体可以通过发送HTTP请求获取页面源代码,然后解析其中的图片URL,再通过HTTP请求下载图片。 其中,requests库和BeautifulSoup库的组合是最常用的方法。下面将详细介绍如何使用requests库和BeautifulSoup库从网页上扒取图片。

一、使用requests库和BeautifulSoup库

1、安装所需库

首先,我们需要安装requests和BeautifulSoup库。这两个库可以通过pip命令安装:

pip install requests

pip install beautifulsoup4

2、发送HTTP请求获取网页源代码

使用requests库发送HTTP请求,获取网页的HTML代码:

import requests

url = 'https://example.com'

response = requests.get(url)

html_content = response.text

在上面的代码中,我们发送了一个GET请求到指定的URL,并将响应的内容存储在html_content变量中。

3、解析HTML代码获取图片URL

使用BeautifulSoup库解析HTML代码,提取出所有的图片URL:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')

img_tags = soup.find_all('img')

img_urls = [img['src'] for img in img_tags]

在上面的代码中,我们创建了一个BeautifulSoup对象,并使用find_all方法查找所有的<img>标签。然后,通过列表推导式提取出每个<img>标签的src属性,即图片的URL。

4、下载图片

使用requests库下载图片并保存到本地:

import os

os.makedirs('images', exist_ok=True)

for img_url in img_urls:

img_response = requests.get(img_url)

img_name = os.path.basename(img_url)

with open(f'images/{img_name}', 'wb') as f:

f.write(img_response.content)

在上面的代码中,我们创建了一个名为images的目录,然后遍历所有的图片URL,发送GET请求下载图片,并将其保存到本地文件中。

二、使用Selenium库

有时候,网页中的图片是通过JavaScript动态加载的,使用requests和BeautifulSoup库可能无法获取到这些图片。在这种情况下,可以使用Selenium库来模拟浏览器行为,获取动态加载的图片。

1、安装Selenium库和浏览器驱动

首先,我们需要安装Selenium库和对应的浏览器驱动。以Chrome浏览器为例,可以通过以下命令安装Selenium库:

pip install selenium

然后,下载Chrome浏览器驱动并将其放置在系统的PATH目录中。

2、使用Selenium库获取网页源代码

使用Selenium库模拟浏览器访问网页,并获取网页的HTML代码:

from selenium import webdriver

url = 'https://example.com'

driver = webdriver.Chrome()

driver.get(url)

html_content = driver.page_source

driver.quit()

在上面的代码中,我们创建了一个Chrome浏览器实例,访问指定的URL,并获取页面的HTML代码。

3、解析HTML代码获取图片URL

与使用requests和BeautifulSoup库的步骤类似,我们可以使用BeautifulSoup库解析HTML代码,提取图片URL:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')

img_tags = soup.find_all('img')

img_urls = [img['src'] for img in img_tags]

4、下载图片

使用requests库下载图片并保存到本地:

import os

os.makedirs('images', exist_ok=True)

for img_url in img_urls:

img_response = requests.get(img_url)

img_name = os.path.basename(img_url)

with open(f'images/{img_name}', 'wb') as f:

f.write(img_response.content)

三、处理图片URL的特殊情况

在实际应用中,图片的URL可能并不是一个完整的URL,有时候会是相对路径或者需要额外的处理才能构成一个完整的URL。下面介绍几种处理图片URL特殊情况的方法。

1、处理相对路径的图片URL

如果图片的URL是相对路径,需要将其转换为完整的URL:

from urllib.parse import urljoin

base_url = 'https://example.com'

img_urls = [urljoin(base_url, img['src']) for img in img_tags]

在上面的代码中,我们使用urljoin函数将相对路径的图片URL转换为完整的URL。

2、处理带有查询参数的图片URL

有些图片URL带有查询参数,这些参数可能会影响图片的下载。可以通过去除查询参数来简化图片URL:

from urllib.parse import urlparse, urlunparse

def remove_query_params(url):

parsed_url = urlparse(url)

return urlunparse(parsed_url._replace(query=''))

img_urls = [remove_query_params(img['src']) for img in img_tags]

在上面的代码中,我们使用urlparse函数解析图片URL,并通过_replace方法去除查询参数。

3、处理图片URL的防盗链

有些网站会设置防盗链机制,防止直接下载图片。可以通过设置请求头中的Referer来绕过防盗链:

headers = {'Referer': 'https://example.com'}

for img_url in img_urls:

img_response = requests.get(img_url, headers=headers)

img_name = os.path.basename(img_url)

with open(f'images/{img_name}', 'wb') as f:

f.write(img_response.content)

在上面的代码中,我们在发送GET请求时设置了Referer头,绕过了防盗链机制。

四、总结

通过上面的介绍,我们详细讲解了如何使用Python将图片扒下来。无论是使用requests库和BeautifulSoup库,还是使用Selenium库,都可以实现图片的下载。同时,我们还介绍了处理图片URL特殊情况的方法,如相对路径、查询参数、防盗链等。希望这些内容能帮助你更好地使用Python进行图片爬取。

相关问答FAQs:

如何使用Python从网页下载图片?
要使用Python从网页下载图片,您可以使用requests库获取网页内容,并结合BeautifulSoup库解析HTML,找到图片的URL。然后,使用requests库下载图片。以下是一个简单的示例代码:

import requests
from bs4 import BeautifulSoup

url = '目标网页URL'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

for img in soup.find_all('img'):
    img_url = img['src']
    img_data = requests.get(img_url).content
    with open('文件名.jpg', 'wb') as handler:
        handler.write(img_data)

使用Python处理下载的图片有什么推荐的库?
在下载图片后,您可能希望对其进行处理。推荐使用Pillow库,它是Python Imaging Library(PIL)的一个分支,功能强大且易于使用。您可以进行图像格式转换、调整大小、裁剪、滤镜等多种操作。安装Pillow库很简单,可以使用pip命令:pip install Pillow

如何确保下载的图片质量和格式?
在下载图片时,确保URL指向高质量的图片是关键。您可以检查图片的文件扩展名(如.jpg、.png等)来判断格式。若需要处理图片质量,可以使用Pillow库的Image.open()函数和Image.save()方法来调整图片的压缩率和格式。例如:

from PIL import Image

img = Image.open('文件名.jpg')
img.save('新文件名.jpg', quality=85)  # quality值范围为1到100
相关文章