Python实战(2)——爬取妹子图片

有一句话说的好:代码源于生活,服务于生活。需求赋予代码更多意义。于是这期我们就爬一下让人血脉喷张的海量妹子图吧!

踩点

我们这次爬取的是煎蛋网的妹子图

# url 链接
http://jandan.net/ooxx/

我们先审查一下元素,我们看到,这个链接中有猫腻!

我们看到这个page-后面跟了一个数字。

我们右击图片检查一下:

img标签里面带了这张图片的链接

好,接下来我们点查看原图,看到的是一个新浪的链接:

http://wx4.sinaimg.cn/large/82e98952gy1fl73hl8t51j20zk0y1tih.jpg

整理思路

我们简单的整理一下思路:

http://jandan.net/ooxx/page-222#comments
  • page-后面这个数字的更改可以修改页面
  • 获取img标签中的图片链接就能找到图片存放的链接

实现

封装url请求

def url_open(url):
    head = {}
    head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
    req = request.Request(url, headers = head)
    response = request.urlopen(req)
    html = response.read()
    return html

爬取http://jandan.net/ooxx/页面span中的页码,通过循环来爬取所有页面的妹子图。

def getpage(url):
    html = url_open(url).decode('utf-8')
    reg = r'\[([\s\S]+?)\]'
    pattern= re.compile(reg)
    tags= re.findall(pattern, html)

    # 返回总页码
    return tags[0]

用正则表达式过滤出图片链接

def find_imgs(url):
    html = url_open(url).decode('utf-8')

    reg = r''
    pattern= re.compile(reg)
    img_addrs= re.findall(pattern, html)

    # 图片列表
    print(img_addrs)
    print("保存图片")
    save_imgs(img_addrs)

将图片保存下来

def save_imgs(img_addrs):
    count = 1
    for each in img_addrs:
        filename = each.split('/')[-1]
        with open(filename,'wb') as f:
            img = url_open("http:"+ each)
            f.write(img)
            print("成功写入图片%d张" %(count))
            count += 1

整合代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/11/5 11:56
# @Author  : glacier
# @Site    : 
# @File    : webSpider_meizi.py
# @Software: PyCharm Edu

import re
from urllib import request
from bs4 import BeautifulSoup

def url_open(url):
    head = {}
    head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
    req = request.Request(url, headers = head)
    response = request.urlopen(req)
    html = response.read()
    return html

def getpage(url):
    html = url_open(url).decode('utf-8')
    reg = r'\[([\s\S]+?)\]'
    pattern= re.compile(reg)
    tags= re.findall(pattern, html)

    # 返回总页码
    return tags[0]

def find_imgs(url):
    html = url_open(url).decode('utf-8')

    reg = r''
    pattern= re.compile(reg)
    img_addrs= re.findall(pattern, html)

    # 图片列表
    print(img_addrs)
    print("保存图片")
    save_imgs(img_addrs)

def save_imgs(img_addrs):
    count = 1
    for each in img_addrs:
        filename = each.split('/')[-1]
        with open(filename,'wb') as f:
            img = url_open("http:"+ each)
            f.write(img)
            print("成功写入图片%d张" %(count))
            count += 1

if __name__=='__main__':
    url = 'http://jandan.net/ooxx/'

    print("获取总页码")
    pageNum = getpage(url)

    for i in range(1,int(pageNum)):
        print("拼接获取图片的 url...")
        url = "http://jandan.net/ooxx/page-"+str(i)+"#comments"
        find_imgs(url)

效果图:

PS

咳咳,好像进来了奇怪的东西呢…..

原文链接:https://glacierbo.github.io/2017/11/05/Python_2/

你可能感兴趣的:(python)