python爬虫入门(#5)——抓取二进制文件(视频,图片等)

网页中除了文本信息外,也会有很多的图片或者视频等非文本信息,既然浏览器能够获取这些信息,那么我们模拟浏览器行为的爬虫也可以获取到
我们这次尝试爬取一个图片

从哔哩哔哩相簿爬取一张图片

我们打开哔哩哔哩相簿的网站,随便选择一张图片
右键复制图片地址
python爬虫入门(#5)——抓取二进制文件(视频,图片等)_第1张图片
这个地址就是我们图片的 url,我们就可以通过他来下载图片

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}
url = 'https://i0.hdslb.com/bfs/album/1955117a3fc6becd646d6e2e9935f2bc2b387b58.jpg@2000w_1e.webp'

response = requests.get(url, headers=headers)
print(response.text)
print(response.content)

我们将获取到的结果打印出来
这里我使用了分别打印了 text 和 content
text 代表的是请求所返回的内容的文本格式
content 代表的是请求所返回的内容的二进制格式
打印的结果分别下面的样子

python爬虫入门(#5)——抓取二进制文件(视频,图片等)_第2张图片

python爬虫入门(#5)——抓取二进制文件(视频,图片等)_第3张图片
很明显,上面的是文本格式,都是乱码,下面的是二进制格式,用十六进制表示

我们甚至可以看到二进制文件开头的标识信息 b’RIFF

那么我们只要把获取到的二进制信息写到文件里,就可以了

file = open('./img.jpg', 'wb')
file.write(response.content)

我们用 wb 表示我们要写入二进制信息
现在看看我们的目录下,就出现了我们爬取到的文件

但是,有没有觉得
这样爬文件和自己保存有个锤子区别
那必然了,这才学到哪,爬个锤子

不过我自己捣鼓出来了一个爬取哔哩哔哩相簿下所有图片的代码
但是暂时不会使用代理池,线程掌握的也不熟悉,就没有设置,所以爬个一百来张就会被封ip

暂时贴一下吧,随便搞的,代码很烂

import requests
import re

 headers = {
     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
     'server': 'swoole-http-server'
 }

 count = 0
 for num in range(1, 25):
     allPages = 'https://api.vc.bilibili.com/link_draw/v2/Doc/list?category=all&type=hot&page_num=' + str(num) + '&page_size=20'
     repsonse = requests.get(allPages, headers=headers)
     mainHeaders = repsonse.headers
     mainPage = repsonse.text
     items = mainPage.split('"')
     for item in items:
         src = (re.findall('https:.*jpg', item))
         if src != []:
             print(src[0])
             imgUrl = src[0]
             bin = requests.get(imgUrl).content
             with open('img#' + str(count) + ".jpg", 'wb') as img:
                 img.write(bin)
             count += 1
             print(count)

至于爬视频,暂时不指望,那个怕是有点难度

你可能感兴趣的:(python爬虫,语言深入)