zoukankan      html  css  js  c++  java
  • 使用python来批量抓取网站图片

    今天"无意"看美女无意溜达到一个网站,发现妹子多多,但是可恨一个page只显示一张或两张图片,家里WiFi也难用,于是发挥"程序猿"的本色,写个小脚本,把图片扒下来再看,类似功能已有不少大师实现了,但本着学习锻炼的精神,自己折腾一遍,涨涨姿势!

    先来效果展示下:

    python代码:

    # -*- coding:utf8 -*-
    import urllib2
    import re
    import requests
    from lxml import etree
    import os
    
    
    def check_save_path(save_path):
        try:
            os.mkdir(save_path)
        except:
            pass
    
    
    def get_image_name(image_link):
        file_name = os.path.basename(image_link)
        return file_name
    
    
    def save_image(image_link, save_path):
        file_name = get_image_name(image_link)
        file_path = save_path + "\" + file_name
        print("准备下载%s" % image_link)
        try:
            file_handler = open(file_path, "wb")
            image_handler = urllib2.urlopen(url=image_link, timeout=5).read()
            file_handler.write(image_handler)
            file_handler.closed()
        except Exception, ex:
            print(ex.message)
    
    
    def get_image_link_from_web_page(web_page_link):
        image_link_list = []
        print(web_page_link)
        try:
            html_content = urllib2.urlopen(url=web_page_link, timeout=5).read()
            html_tree = etree.HTML(html_content)
            print(str(html_tree))
            link_list = html_tree.xpath('//p/img/@src')
            for link in link_list:
                # print(link)
                if str(link).find("uploadfile"):
                    image_link_list.append("http://www.xgyw.cc/" + link)
        except Exception, ex:
            pass
        return image_link_list
    
    
    def get_page_link_list_from_index_page(base_page_link):
        try:
            html_content = urllib2.urlopen(url=base_page_link, timeout=5).read()
            html_tree = etree.HTML(html_content)
            print(str(html_tree))
            link_tmp_list = html_tree.xpath('//div[@class="page"]/a/@href')
            page_link_list = []
            for link_tmp in link_tmp_list:
                page_link_list.append("http://www.xgyw.cc/" + link_tmp)
            return page_link_list
        except Exception, ex:
            print(ex.message)
            return []
    
    
    def get_page_title_from_index_page(base_page_link):
        try:
            html_content = urllib2.urlopen(url=base_page_link, timeout=5).read()
            html_tree = etree.HTML(html_content)
            print(str(html_tree))
            page_title_list = html_tree.xpath('//td/div[@class="title"]')
            page_title_tmp = page_title_list[0].text
            print(page_title_tmp)
            return page_title_tmp
        except Exception, ex:
            print(ex.message)
            return ""
    
    
    def get_image_from_web(base_page_link, save_path):
        check_save_path(save_path)
        page_link_list = get_page_link_list_from_index_page(base_page_link)
        for page_link in page_link_list:
            image_link_list = get_image_link_from_web_page(page_link)
            for image_link in image_link_list:
                save_image(image_link, save_path)
    
    
    base_page_link = "http://www.xgyw.cc/tuigirl/tuigirl1346.html"
    page_title = get_page_title_from_index_page(base_page_link)
    if page_title <> "":
        save_path = "N:\PIC\" + page_title
    else:
        save_path = "N:\PIC\other\"
    
    get_image_from_web(base_page_link, save_path)
    View Code

    代码思路:

    使用urllib2.urlopen(url).open来获取页面数据,再使用etree.HTML()将页面解析成xml格式,方便使用xmlpath方式来获取特定node的值,最终遍历所有页面得到要下载的图片,将图片保存到本地。

    --=========================================================

    python包安装:

    很多python包没有windows安装包,或者没有X64版本的安装包,对于新手来说,很难快速上手,可以使用pip或easy_install来安装要使用的安装包,相关安装方式:https://pypi.python.org/pypi/setuptools

    本人采用easy_install方式,我电脑安装python2.7,安装路径为:C:Python27python.exe,下载ez_setup.py文件后到c盘保存,然后运行cmd执行以下命令:

    C:Python27python.exe "c:ez_setup.py"

    即可安装easy_install,安装结束后可以C:Python27Scripts下看到easy_install-2.7.exe,如果我们想在本地安装requests包,那么可以运行以下命令来试下:

    "C:Python27Scriptseasy_install-2.7.exe" requests

    --==========================================================

    依旧是妹子压贴,推女郎第68期,想要图的自己百度

  • 相关阅读:
    linux下查看当前登陆的用户数目
    uboot能ping通本机无法ping通本机上搭建的虚拟机
    一个时序图描述从用户在浏览器地址栏输入url并按回车,到浏览器显示相关内容的各个过程
    3*0.1 == 0.3 将会返回什么?true 还是 false?
    Floating Point Math
    浮点数在计算机中是如何表示的
    浮点数在计算机中是如何表示的
    Java并发编程:volatile关键字解析
    join的源码
    i++ 是线程安全的吗
  • 原文地址:https://www.cnblogs.com/TeyGao/p/5225940.html
Copyright © 2011-2022 走看看