随着微信,QQ等社交媒体的普及,人们自我表达的方式也越来越多样化,除了文字,语音,图片等形式也比以往任何时候都要使用的更加频繁。其中,图片作为文字表达的重要补充,在某些特定场合的恰当运用,往往可以收到意想不到的效果。通过各种表情图片生动形象地表达自己的当时的喜怒哀乐以及一些难以用语言精准描述的微心理也渐渐成为一种趋势,进而演变成为当今大家都喜欢的斗图日常,但是,微信收藏表情的数量是有上限的,不能一直收藏,要是遇到更有趣的图片,为了实时更新自己的“弹药库”,也就只能忍痛割爱了。好在现在有不少网站为我们提供了丰富的图片资源,我们只要能快速获取我们需要的图片,构建自己专属的斗图“弹药库”就可以了,抓取斗图啦网站的图片来壮大自己的“弹药库”这个想法也就自然应运而生了。具体做法也很简单:先把整个爬虫的思路和框架大概了解了一下,学习掌握如何抓取jpg格式的图片,但这只是第一步,因为无论是jpg格式还是png格式的图片都是静态的图片,在斗图日趋火爆的今天,感觉这种“炮弹”的“杀伤力”不是很大,我们多数人希望在斗图的时候用的最好是动图,而且是要那种有多嘚瑟就有多嘚瑟的动图,这样发到对方手机上,才能更有效果。所以,在完成代码的基础上,需要做一些修改。这么做是为了让代码的扩展性更强一点,方便我们按需获取我们想要的图片格式,或者获取所有我们想要的图片格式。思路大概就是这样,不是很难,最后需要加上异常处理以及多线程来完善整个代码块,使得整个代码的稳定性和效率都能提高一些。
简单介绍完思路,下面就直接上代码和效果图,这里以获取圣诞主题的图片为例进行相关的演示。
代码:
# -*- coding:utf-8 -*-
__author__ = 'YangW'
import requests,threading
from lxml import etree
from bs4 import BeautifulSoup
def get_html(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'}
try:
response = requests.get(url, headers=headers)
html = response.content
return html
except:
print('request error')
pass
#匹配图片url,通过自定义函数来实现
def get_img_html(html):
soup = BeautifulSoup(html,'lxml')
all_a = soup.find_all('a',class_='list-group-item')
for i in all_a:
img_html = get_html(i['href']) #获取源码
get_img(img_html)
#图片url
def get_img(html):
soup = etree.HTML(html)
items = soup.xpath('//div[@class="artile_des"]')
for item in items:
imgurl_list = item.xpath('table/tbody/tr/td/a/img/@onerror')
start_save_img(imgurl_list)
#下载图片
x = 1
def save_img(img_url):
global x
x+=1
img_url = img_url.split('=')[-1][1:-1]
suffix = img_url.split('.')[-1]
if suffix=='gif':
print u'正在下载'+'http:'+img_url
img_content = requests.get('http:'+img_url).content
with open('doutu/%s.%s'%(x,suffix),'wb') as f:
f.write(img_content)
def start_save_img(imgurl_list):
for i in imgurl_list:
# print i
th = threading.Thread(target=save_img,args=(i,))
th.start()
#主函数
def main():
start_url = 'https://www.doutula.com/article/list/?page={}'
#for i in range(21,532):
#for i in range(1,5):
for i in range(1,2):
start_html= get_html(start_url.format(i)) #获取源码
get_img_html(start_html) #获取内页图片的url
if __name__ == '__main__': #判断文件入口
main()
效果图:
1.抓一波日常斗图
图1 日常斗图
2.抓一波圣诞特辑
说明:这个下载下来直接查看是很难的,一般电脑默认的图片查看器是无法查看这种gif格式的动图的,除非你以网页的形式打开。为了使您正常浏览爬取到的动图,建议安装“美图看看”软件以便查看。当然,如果要把这些动图发到微信上,是可以正常显示的。
除夕将至,打开手机,在各种祝福满天飞的时候,不知道您是否有种手机里祝福的图片不是很多或者很多都是别人发过的感觉,再发一遍,情义肯定是会有的,但新意似乎就有点不给力啊,为了让您的新意配得上您的心意,不知道您是否有想过爬点别出心裁的图片以表达自己在新年对家人,佳人,和朋友满满的祝福,如果这种想法在您内心深处蠢蠢欲动的话,希望小编的这篇小文章和小想法对您能有所帮助。
领取专属 10元无门槛券
私享最新 技术干货