网页爬虫抓取百度图片(一种全新的方式来获取图片素材,你想要的这里全都有)

优采云 发布时间: 2021-09-30 18:10

  网页爬虫抓取百度图片(一种全新的方式来获取图片素材,你想要的这里全都有)

  你还去网站搜什么图?

  你还在寻找百度图片等图片素材网站吗?

  今天给大家分享一个全新的图片素材获取方式。你想要的这里都有!

  是新浪微博!新一代的超级流量门户,甚至现在很多人都用它作为替代百度搜索的工具。以前是找杜娘找东西,现在是搜微博。

  比如某个宅男想看清纯少女的照片,越多越好。他会这样搜索:

  

  然后,他会逐页阅读和欣赏这些吸引眼球的图片,并在遇到喜欢的人时将大图片下载到本地保存。

  

  作为一个python程序员,我懒得像这样一页一页地翻页。喜欢全部下载下来慢慢欣赏,爆了硬盘!类似于以下内容:

  

  这种简单的问题让我们为pythoner写爬虫那么容易,何乐而不为呢?让我直接与你分享。

  分析目标网站

  微博的搜索结果是分页的,所以我们的思路肯定是分页处理,逐页解析。

  我们先来看看搜索结果:

  

  我们点击“搜索”按钮后,很容易找到搜索请求。此处网页显示了第一页的结果。

  然后我们点击“Next”,我们可以发现请求变成了如下:

  

  细心的话,可能一眼就发现在请求后多了一个page参数,指的是页码。这很容易。我们只需要改变页码就可以请求对应页面的内容。

  由于此请求返回一个 HTML 页面,因此我们需要在此页面上努力找到指向图像的链接。我们随便用页面元素检查来定位一张图片,会看到如下效果:

  

  我们可以看到这个div里面的action-data是一个集合,下面li里面img的action-data是单张图片的数据。

  接下来,我们点击“查看大图”按钮,浏览器会跳转到一个新页面,页面内容为大图。

  

  从请求的 URL 往下看,我发现了这个:

  

  我把这个网址复制到浏览器请求中,发现这正是我们需要的大图。我们也可以很容易的看到这个URL的特点,就是最后我们在上面的action-data中添加了pic_id。

  这样,我们的思路就很清晰了,下面是获取一页图片的思路:

  获取页面内容;在页面内容中找到图片ID;拼接查看大图的URL,请求获取图片;将图像写入本地。代码代码

  思路很清晰,需要代码code来验证。由于代码比较简单,我就一次性给大家展示一下。

  import requests

import re

import os

import time

cookie = {

'Cookie': 'your cookie'

}

header = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4144.2 Safari/537.36'

}

get_order = input('是否启动程序? yes or no: ')

number = 1

store_path = 'your path'

while True:

if get_order != 'no':

print('抓取中......') # 下面的链接填写微博搜索的链接

url = f'https://s.weibo.com/weibo?q=%23%E5%B0%91%E5%A5%B3%E5%86%99%E7%9C%9F%23&wvr=6&b=1&Refer=SWeibo_box&page={number}'

response = requests.get(url, cookies=cookie)

result = response.text

print(result)

detail = re.findall('data="uid=(.*?)&mid=(.*?)&pic_ids=(.*?)">', result)

for part in detail:

uid = part[0]

mid = part[1]

pids = part[2]

for picid in pids.split(','):

url_x = f'https://wx1.sinaimg.cn/large/%s.jpg'%picid # 这里就是大图链接了

response_photo = requests.get(url_x, headers=header)

file_name = url_x[-10:]

if not os.path.exists(store_path+uid):

os.mkdir(store_path+uid)

with open(store_path+uid + '/' + file_name, 'ab') as f: # 保存文件

f.write(response_photo.content)

time.sleep(0.5)

print('获取完毕')

get_order = input('是否继续获取下一页? Y:yes N:no: ')

if get_order != 'no':

number += 1

else:

print('程序结束')

break

else:

print('程序结束')

break

  我这里采用了逐页断点的形式,方便调试。如果你想一次得到所有页面的图片,你可以把这些输入判断去掉,一次性全部运行。代码中的cookie和图片存储路径需要替换为你本地的。

  运行后的结果如下:

  

  我按照微博把图片分到文件夹里。如果觉得不直观,想把所有图片都放在一个目录下,可以去掉这一层文件夹。

  总结

  本文介绍如何通过一个简单的爬虫获取微博图片搜索结果。代码量相当少,但是对一些人来说是很有帮助的,省时省力。还可以展开,除了图片,还可以获取其他搜索内容,比如微博文字、视频、购物链接等。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线