使用Python爬百度贴吧里面的美女图

大学时学过几年编程,毕业后虽然从事IT行业,却一直没有机会写代码。几年工作下来,看到我们公司的码农状态,竟然再也不想编程。算起来一个项目都没有完成过,日后想做码农也做不成了。

最近因为工作需要,跑去做段时间运维。Python作为脚本神器,自然要了解。初学Python,觉得还是找几个小项目练练手比较好。GitHub上“Python 练习册,每天一个小程序”便是我找的一些不错的题目。

于是第 0013 题自然而然的引起我的注意: 用 Python 写一个爬图片的程序,爬这个链接里的日本妹子杉本有美的图片。有了荷尔蒙的刺激,学习动力也提高不少。

先上一下效果图:

Python小程序效果图

程序简单解析如下:

1、使用urllib2打开网页链接,获取网页内容。

request = urllib2.Request(url)
response = urllib2.urlopen(request)
content = response.read()

2、使用正则表达式匹配需要获取的图片。

rule_str = r'src="(.+?\.jpg)"'
rule = re.compile(rule_str)
img_list = rule.findall(content)

3、筛选。

我这里默认需要下载的图片是链接中最多的,因此先计算寻找最多的图片链接的长度。然后将不是此长度的链接排除掉。这里使用了Counter这个函数,对每个链接的长度进行自动排序。

for img in img_list:
    len_temp.append(len(img))  # 计算每个图片链接的长度
most_length = tuple(Counter(len_temp).most_common(1))[0][0]  # 默认需要下载的图片是链接中最多的,寻找最多的图片链接的长度

4、下载图片。

for img in img_list:
    if len(img) != most_length:
        continue  # 不是目标图片,跳出继续
    else:
        pic = urllib2.urlopen(img).read()
        f = open(r"%s\%s%s.jpg" % (file_path, x, random.choice(string.ascii_letters)), "wb+")
        f.write(pic)
        f.close()
        x += 1

5、完整程序如下。

# -*- coding:UTF-8 -*-
import urllib
import urllib2
import re
from collections import Counter
import random
import string


def pic_download(url, file_path):
    # 打开网页
    # url = r'http://tieba.baidu.com/p/2166231880'
    request = urllib2.Request(url)
    response = urllib2.urlopen(request)
    content = response.read()
    # print content

    # 正则表达式
    rule_str = r'src="(.+?\.jpg)"'
    rule = re.compile(rule_str)
    img_list = rule.findall(content)

    print u"正在下载图片..."
    x = 0
    len_temp = []
    for img in img_list:
        len_temp.append(len(img))  # 计算每个图片链接的长度
    most_length = tuple(Counter(len_temp).most_common(1))[0][0]  # 默认需要下载的图片是链接中最多的,寻找最多的图片链接的长度

    for img in img_list:
        if len(img) != most_length:
            continue  # 不是目标图片,跳出继续
        else:
            pic = urllib2.urlopen(img).read()
            f = open(r"%s\%s%s.jpg" % (file_path, x, random.choice(string.ascii_letters)), "wb+")
            f.write(pic)
            f.close()
            x += 1

    print u"%s 张图片已被下载至指定位置" % x

# 主函数
if __name__ == "__main__":
    url = raw_input(r"Please input the BAIDU tieba link:")  # 请输入百度贴吧链接的帖子
    file_path = raw_input(r"Please input the file path(default: C:\Users\Wind\Pictures): ")  # 请输入想要保存图片的位置
    pic_download(url=r'http://tieba.baidu.com/p/1165861759', file_path=r"C:\Users\Wind\Pictures")

 

综上,只要输入百度任意帖子的链接,其中的图片无论是美女还是美景,就全部是你的囊中之物啦。Anyway,Python大法好!最后送上一张美图供大家欣赏~~

杉本有美

原创不易,转载请注明出处。

最美时刻,版权所有丨如未注明,均为原创丨本网站采用BY-NC-SA协议进行授权,转载请注明转自:https://www.msmk.me/download-pic-with-python/

相关文章

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注