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期,想要图的自己百度

  • 相关阅读:
    git忽略.idea文件
    python pip获取所有已安装的第三包
    bootstrap最简单的导航条
    sencha architect开发sencha touch应用注意事项
    反编译sencha toucha打包的apk文件,修改应用名称支持中文以及去除应用标题栏
    TortoiseSVN文件夹及文件图标不显示解决方法
    sql server 约束 查找
    SQLSERVER金额转换成英文大写的函数
    JS把数字金额转换成中文大写数字的函数
    C#中将数字金额转成英文大写金额的函数
  • 原文地址:https://www.cnblogs.com/TeyGao/p/5225940.html
Copyright © 2011-2022 走看看