[Python][爬虫03]requests+BeautifulSoup实例:抓取图片并保存

    上一篇中,安装和初步使用了requests+BeautifulSoup,感受到了它们的便捷。但之前我们抓取的都是文字信息,这次我们准备来抓取的是图片信息。

>第一个实例

    我们来抓取这个网站的图片:http://www.ivsky.com/bizhi/stand_by_me_doraemon_v45983/

    首先,审查网页元素:


    因此其结构就为:

<div class='il_img'> x 若干个,对每个div有 :
    <img src='我们要的img src数据'>

    整体思路是:

  • 获取每个图片的src地址;
  • 构建requests去请求img的src并获取图片;
  • 写入文件

    代码如下:

import requests
from bs4 import BeautifulSoup
pic_id = 0  # 图片编号
url = 'http://www.ivsky.com/bizhi/stand_by_me_doraemon_v45983/'
bs = BeautifulSoup(requests.get(url).content, "lxml")  # 调用lxml作为解析引擎 需要:pip install lxml
for i in bs.select('.il_img'):
    pic_url = i.find('img')['src']
    pic_file = open('./pic_'+str(pic_id)+'.jpg', 'wb')  # 二进制创建并写入文件
    pic_file.write(requests.get(pic_url).content)  # 写出请求得到的img资源
    pic_id += 1

    这样,就能在爬虫脚本目录下找到我们需要的图片了:



>第二个实例

    这次我们来抓取这个网站的资源,要的是奖章图标+奖章等级+等级标志颜色+称号,并按照'等级+标志颜色+称号.gif'的方式存储:


    结构为:

<table>
    <td>
        <img> img-src
    <td> 等级
    <td> 颜色
    <td> 称号

    同样,也就可以给出相关的代码了:

import re
import requests
from bs4 import BeautifulSoup
url = 'http://ol.kuai8.com/gonglue/236751_all.html'
bs = BeautifulSoup(requests.get(url).content, "lxml")
for table in bs.find_all('table', attrs={'border': 1, 'align': 'center'}):  # 获取所有的数据表
    for td in table.find_all(td_with_img): # 获取含有img标签的td标签
        img_src = td.img['src'] # 获取图片url
        level = td.find_next_sibling('td')  # 等级td节点
        color = level.find_next_sibling('td') # 颜色td节点
        title = color.find_next_sibling('td')  # 称号td节点
        opf = open(get_title(level.string, color.string, title.string), 'wb')
        opf.write(requests.get(img_src).content)
        print '已抓取:', re.sub('\s', '', level.string)

    这里用了两个方法:

def td_with_img(node):
    return node.name == 'td' and node.img is not None  # 含有img标签的td标签 
def get_title(level, color, title):
    return './ppt/'+re.sub('\s', '', level)+re.sub('\s', '', color)+re.sub('\s', '', title)+'.gif' # 移除空白并直接得到文件名

    我们的成果:


猜你喜欢

转载自blog.csdn.net/Shenpibaipao/article/details/80223002