爬虫学习之下载图片

首先找到网页的图片地址如

网址为:

https://i0.hdslb.com/bfs/face/03525d094e0e2a142d08181532d729615c18ec92.jpg

找到了这个网址, 我们就能开始下载了. 为了下载到一个特定的文件夹, 我们先建立一个文件夹吧. 并且规定这个图片下载地址.

import os
os.makedirs('./img/', exist_ok=True)

IMAGE_URL = "https://i0.hdslb.com/bfs/face/03525d094e0e2a142d08181532d729615c18ec92.jpg"

使用 urlretrieve 

在 urllib 模块中, 提供了我们一个下载功能 urlretrieve. 使用起来很简单. 输入下载地址 IMAGE_URL 和要存放的位置. 图片就会被自动下载过去了.

from urllib.request import urlretrieve
urlretrieve(IMAGE_URL, './img/image1.png')

使用 request 

而在 requests 模块, 也能拿来下东西. 下面的代码实现了和上面一样的功能, 但是稍微长了点. 但我们为什么要提到 requests 的下载呢? 因为使用它的另一种方法, 我们可以更加有效率的下载大文件.

import requests
r = requests.get(IMAGE_URL)
with open('./img/image2.png', 'wb') as f:
    f.write(r.content)

所以说, 如果你要下载的是大文件, 比如视频等. requests 能让你下一点, 保存一点, 而不是要全部下载完才能保存去另外的地方. 这就是一个 chunk 一个 chunk 的下载. 使用 r.iter_content(chunk_size) 来控制每个 chunk 的大小, 然后在文件中写入这个 chunk 大小的数据.

r = requests.get(IMAGE_URL, stream=True)    # stream loading

with open('./img/image3.png', 'wb') as f:
    for chunk in r.iter_content(chunk_size=32):
        f.write(chunk)

 

有了这些知识的积累, 我们就能开始做一个小的实战练习, 去下载一些国家地理杂志的美图

网址为http://www.ngchina.com.cn/animals/

找到图片位置

找到这张图片的所在位置, 对比这类型的图片, 找到一种手段来筛选这些图片. 发现他们都存在于 img_list 的这种 <ul> 中.

而图片地址都是在 <img> 中.

<img src="http://image.ngchina.com.cn/2021/0125/20210125050736193.jpg">

现在我们有了思路, 先找带有 img_list 的这种 <ul>, 然后在 <ul> 里面找 <img> 

下载图片 

有了思路, 现在我们就用 python 来下图吧. import BeautifulSoup 和 requests. 定义爬取的 url.

from bs4 import BeautifulSoup
import requests

URL = "http://www.ngchina.com.cn/animals/"

用 BeautifulSoup 找到带有 img_list 的这种 <ul>,

html = requests.get(URL).text
soup = BeautifulSoup(html, 'lxml')
img_ul = soup.find_all('ul', {"class": "img_list"})

从 ul 中找到所有的 <img>, 然后提取 <img> 的 src 属性, 里面的就是图片的网址啦. 接着, 就用之前在 requests 下载那节内容里提到的一段段下载.

for ul in img_ul:
    imgs = ul.find_all('img')
    for img in imgs:
        url = img['src']
        print(url)
        r = requests.get(url, stream=True)
        image_name = url.split('/')[-1]
        with open('./img/%s' % image_name, 'wb') as f:
            for chunk in r.iter_content(chunk_size=128):
                f.write(chunk)
        print('Saved %s' % image_name)
'''
http://image.ngchina.com.cn/2021/0205/20210205100918210.jpg
Saved 20210205100918210.jpg
http://image.ngchina.com.cn/2021/0201/20210201114911255.jpg
Saved 20210201114911255.jpg
http://image.ngchina.com.cn/2021/0129/20210129102132614.jpg
Saved 20210129102132614.jpg
http://image.ngchina.com.cn/2021/0128/20210128015857804.jpg
Saved 20210128015857804.jpg
http://image.ngchina.com.cn/2021/0125/20210125050736193.jpg
Saved 20210125050736193.jpg
http://image.ngchina.com.cn/2021/0125/20210125113017709.jpg
Saved 20210125113017709.jpg

https://www.zcool.com.cn/work/ZNDk0NTQxMTI=.html 

爬取一系列的图如上

只需要换链接,和提取图片网址其他不变

from bs4 import BeautifulSoup
import requests

URL = "https://www.zcool.com.cn/work/ZNDk0NTQxMTI=.html"
html = requests.get(URL).text
#print(html)
soup = BeautifulSoup(html, 'lxml')
#img_ul = soup.find_all('div',{"class": "gallery-row"})
img_ul = soup.find_all(attrs={"class": "photo-information-content"})
print(img_ul)

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python爬虫中,我们可以使用XPath来提取网页中的图片链接并进行下载。XPath是一种在XML和HTML文档中查找和定位元素的语言。要在Python中使用XPath,我们需要使用相关的库,如lxml库或BeautifulSoup库。下面是一个示例代码,演示了如何使用XPath来下载图片: ```python import requests from lxml import html # 定义目标网页的URL url = 'http://example.com' # 发送请求获取网页内容 response = requests.get(url) content = response.text # 使用lxml库解析网页内容 tree = html.fromstring(content) # 使用XPath表达式提取图片链接 image_urls = tree.xpath('//img/@src') # 遍历图片链接列表,下载图片 for image_url in image_urls: # 发送请求获取图片内容 image_response = requests.get(image_url) # 将图片保存到本地 with open('image.jpg', 'wb') as f: f.write(image_response.content) ``` 在上面的代码中,我们首先发送请求获取网页的内容,然后使用lxml库将网页内容转换为可解析的树结构。接下来,我们使用XPath表达式`//img/@src`提取所有`<img>`标签的`src`属性值,即图片链接。最后,我们遍历图片链接列表,发送请求获取图片内容,并将图片保存到本地。 请注意,上面的代码只是一个示例,具体的使用情况可能因不同的网站而有所差异。你需要根据目标网站的实际情况,调整XPath表达式和代码逻辑。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python爬虫实战之xpath解析](https://blog.csdn.net/weixin_58667126/article/details/126105955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python3爬虫学习-爬取图片批量下载 XPATH](https://blog.csdn.net/xunxue1523/article/details/104584361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值