第0011道练习题_Python下载<杉本有美>图片

Python练习题第 0011题

https://github.com/Yixiaohan/show-me-the-code

用 Python 写一个爬图片的程序,爬这个链接里的日本妹子图片 :-)

http://tieba.baidu.com/p/2166231880

如果html是这样子的话:

<img...>...</img>
<img...>...</img>
<img...>...</img>

用BeautifulSoup是没问题的,可是!贴吧里上传的图片,html是下面这样的,用BeautifulSoup的话会死的很惨,结果超出想象!

所以果断用正则非贪婪模式找到所有节点之后,再用BS拎出每个图片的链接。

<img bdwater="杉本有美吧,955,550" changedsize="true" class="BDE_Image" height="323" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=6b12a1088718367aad897fd51e738b68/1e29460fd9f9d72abb1a7c3cd52a2834349bbb7e.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=c27ae82432fa828bd1239debcd1f41cd/86674dafa40f4bfb85a9f275024f78f0f736187e.jpg" width="560"><br><img bdwater="杉本有美吧,960,700" changedsize="true" class="BDE_Image" height="408" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=cf8beb009213b07ebdbd50003cd69113/d56ca4de9c82d158f8c63590810a19d8bc3e422b.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=f76c7125359b033b2c88fcd225ce3620/908be71f3a292df5c3b8c034bd315c6034a87378.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=0c3f8f99d53f8794d3ff4826e21a0ead/4e8839738bd4b31c197bf89a86d6277f9e2ff835.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=d776057135a85edffa8cfe2b795409d8/5603c7160924ab18fc6c8d1634fae6cd7b890b79.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=ab95f855ac345982c58ae59a3cf4310b/b85ba63533fa828b9a56f1c2fc1f4134970a5a7a.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=fc6240c9bd3eb13544c7b7b3961ea8cb/d57664f082025aafd86712eafaedab64034f1a1a.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=7bb08445574e9258a63486e6ac83d1d1/e2a86c899e510fb37db71bb6d833c895d0430ccd.jpg" width="560"><br><img bdwater="杉本有美吧,1280,860" changedsize="true" class="BDE_Image" height="376" pic_type="0" src="http://imgsrc.baidu.com/forum/w%3D580/sign=4583262f6609c93d07f20effaf3cf8bb/b32054a98226cffc9283d393b8014a90f703eacf.jpg" width="560"/></br></img></br></img></br></img></br></img></br></img></br></img></br></img></br></img></br></img>

Talk is cheap, show you my code.

#! /usr/bin/env python
#! -*- coding:utf-8 -*-

__author__ = ‘Sophie2805‘

import urllib2
from bs4 import BeautifulSoup
import re

if __name__ == ‘__main__‘:
    url ="http://tieba.baidu.com/p/2166231880"
    save_path = "/Users/Sophie/Downloads/shanben_pic/"

    headers = {
            ‘User-Agent‘:‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘,
            ‘Referer‘:"http://tieba.baidu.com"
    }
    req = urllib2.Request(url = url ,headers = headers)
    html = urllib2.urlopen(req).read()

    # non-greedy mode to find all the pic, BS would not work here because the html is not normal
    p = re.compile(‘<img.+?class="BDE_Image".+?>‘)
    list_of_pic = p.findall(html)

    counter = 1
    for x in list_of_pic:
        soup = BeautifulSoup(x)
        url = soup.img[‘src‘]
        req = urllib2.Request(url=url, headers=headers)
        pic = urllib2.urlopen(url).read()
        postfix = url[url.rfind(‘.‘):]
        #print postfix
        file = open(save_path+str(counter)+postfix,‘w‘)
        try:
            file.write(pic)
        finally:
            file.close()
        counter += 1

知识点Get

Python整型和字符串的转换

int -> str: str(int_value)

str -> int: int(str_value)

正则非贪婪模式和贪婪模式

http://deerchao.net/tutorials/regex/regex.htm

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-20 02:26:24

第0011道练习题_Python下载<杉本有美>图片的相关文章

第0004道练习题_Python统计文本里单词出现次数

Python练习题第 0004 题 https://github.com/Show-Me-the-Code/show-me-the-code 第 0004 题:任一个英文的纯文本文件,统计其中的单词出现次数. Talk is cheap, show you my code. #! /usr/bin/env python #! -*- coding: utf-8 -*- from collections import OrderedDict __author__ = 'Sophie' class

第0000道练习题_Python简单图像处理

Python练习题第 0000 题 https://github.com/Show-Me-the-Code/show-me-the-code 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. Talk is cheap, show you my code. #! /usr/bin/env python # -*- coding:utf-8 -*- from PIL import Image, ImageDraw, ImageFont __author_

dede不能下载远程图片及如何实现图片本地化的方法

有些时候我们想保存图片到本地服务器的时候发现保存不了,比如我们自己拷贝自己的站点到另外一个服务器等等,下面3A网络的小钱就来分享Dedecms无法保存远程图片到本地服务器的解决方法,分享给大家供大家参考.具体分析如下: 一.开启远程图片本地化 在编辑区域上方有个附加选项:下载远程图片和资源,把这个选上即可!也在可以在系统设置里面的其他选项把:远程图片本地化这个项目给选上! 二.检查网站目录 上传图片目录中是否有allimg这个文件夹(当更改了图片上传目录的情况下最容易出现这个问题) 三.可能是因

织梦5.7下载远程图片和资源无效全套最新解决方案

1.织梦5.7下载远程图片和资源无效可能是因为服务器上禁用了fsockopen() 函数造成的,在用fsockopen()的地方用 stream_socket_client()代替就可以了. 具体修改地方是 /include/dedehttpdown.class.php 第507行 $this->m_fp = @fsockopen($this->m_host, $this->m_port, $errno, $errstr,10); 替换为 $this->m_fp = @stream

ASP.NET下载远程图片保存到本地的方法、保存抓取远程图片

ASP.NET下载远程图片保存到本地的方法.保存抓取远程图片 2012-05-16 11:25:51     我来说两句      收藏    我要投稿 以下介绍两种方法:1.利用WebRequest,WebResponse 类WebRequest wreq=WebRequest.Create("http://up.2cto.com/2012/0516/20120516112717995.gif");    HttpWebResponse wresp=(HttpWebResponse)

C# 下载远程图片并显示

/// <summary> /// 下载远程图片 /// </summary> /// <param name="url"></param> /// <returns></returns> private Image GetImage(string url) { try { HttpWebRequest myrequest = WebRequest.Create(url) as HttpWebRequest; Ht

下载是图片损害,文件乱码解决方法

require_once('./include.php');        $filename = $_GET['filename'];    $realName = explode('_', $filename); //下载次数每次加一    $sql = "update exam_file set f_dltimes = f_dltimes+'1' where f_id=".$_GET['f_id'];    mysql_query($sql); //自己起的名字        h

[记录][python]python爬虫,下载某图片网站的所有图集

随笔仅用于学习交流,转载时请注明出处,http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序,一个爬去指定图片站点的所有图集,现在还是一个非常简陋的单线程程序.下一步是改写成多线程,虽然python多线程被诋毁得一塌糊涂.同时加上异常处理. 近来练习python程序,仿照别人的爬虫写一个自己的爬虫来练练手.在编写的过程中遇到各种问题,中文编码.请求不到html等问题.撰写该随笔的目的是将所遇到的问题记录下来,并提供相应的

python实现爬虫下载美女图片

python实现爬虫下载美女图片 本次爬取的贴吧是百度的美女吧,给广大男同胞们一些激励 在爬取之前需要在浏览器先登录百度贴吧的帐号,各位也可以在代码中使用post提交或者加入cookie 爬行地址:http://tieba.baidu.com/f?kw=%E7%BE%8E%E5%A5%B3&ie=utf-8&pn=0 #-*- coding:utf-8 -*- import urllib2 import re import requests from lxml import etree 这