自学爬虫获取照片(零基础)

新手,初级尝试。爬取简单网站的MM照片。写博留念。
步骤如下:
第一步:分析网站
 网址:http://www.7160.com/xingganmeinv/list_3_1.html

自学爬虫获取照片(零基础)

打开网页元素,找到图片地址位置,地址在img标签下的src键中,获取每张照片的地址(http://img.7160.com/uploads/180130/12-1P1301A92Bc.jpg)然后用二进制格式保存照片。

第二步:获取页面代码

1.导入库:

#!/usr/bin/python
# -*- coding:utf-8 -*-
import urllib2
from bs4 import  BeautifulSoup
import itertools
import os
import time

 2.获取页面代码:
def get_infor(url,re_tries =5):
    headers = {}
    headers['User_agent']='Mozilla/5.0 *********'
    try:
        request = urllib2.urlopen(url)
        html =request.read()
    except urllib2.URLError as e:
        print ('get_infor.error:',e.reason)
        html =None
        if re_tries >0:
            if hasattr(e,'code')and 500<=e.code<600:
                return get_infor(url,re_tries-1)
    return html

说明:re_tries=5 该参数是为了解决因为网络不稳定导致的HTTP错误代码5XX错误:

5xx(服务器错误)
此类状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误极大概率是服务器本身的错误,而不是请求出错。

详细说明:
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

建议通过re_tries=x来设置刷新次数,服务器稳定性强时即可获取页面代码。

第三步:从页面代码中找出图片地址

下图为代码截图

def get_picture(html):
    picture_links=[]
    soup = BeautifulSoup(html,'html.parser')
    imgs = soup.find_all('img')
    for img in imgs:
        picture_links.append( img['src'])
    return picture_links
分析:

自学爬虫获取照片(零基础)

首先建一个空列表,目的是为了接收产生的图片地址。这里面的 soup.find_all('img')产生的是字典形式组成的列表(敲黑板),然后再先遍历这个列表,每个元素是一个字典img,img['src']意为取键为'src'的值,值就是图片地址。然后把每个值加到空列表里。

第四步:保存图片
def printPicture(links,page):
    os.chdir("C:\study  wang\picture")
    num=1+((page-1)*28)
    for link in links:
        u = urllib2.urlopen(link)
        date = u.read()
        name =str(num)
        f = open(name+'.jpg','wb')
        f.write(date)
        num = num + 1
        f.close

for page in itertools.count(1):
    start_url ='http://www.7160.com/xingganmeinv/list_3_%d.html'%page
    html = get_infor(start_url)
    links=get_picture(html)
    printPicture(links,page)
    time.sleep(5)

   设置保存图片的路径如上图。网页显示每页有28张照片,照片数字名初始值为num,num=1+(page-1)*28。这里的page参数即页码,用itertools模块产生,不懂得可以看一下廖大大的课程。

效果:

自学爬虫获取照片(零基础)

      简单的图片抓取工具完成。

      过程虽然无比简单,但第一次通过自学独立完成,内心是澎湃的。

      记录!共勉!