字符串(str)编码成字节码(bytes),字节码解码为字符串

获取当前环境编码:sys.stdin.encoding

url编码urllib.parse.quote()

url解码urllib.parse.unquote()

列表去重:pages = list(set(pages))

创建文件夹(可多级创建):os.makedirs(folder)  os.mkdir()只能单级创建

首先分析网页(图虫网)的URL规律:

  根网页地址形如:

    http://tuchong.com/tags/人像/?page=[1, 2, 3 ...]

  二级网页链接形如:

    href="http://tuchong.com/239137/6400827/"
    href="http://hezi1984.tuchong.com/6407909/"

  目标图片链接形如:

    src="http://photos.tuchong.com/27949/f/6915745.jpg"

-----程序源文件:getPic.py-----

 import re, os, time
 import urllib.parse
 import urllib.request

 def getHtml(url):#取得网页的html纯文本
     return urllib.request.urlopen(url).read().decode('utf-8')

 def download(url, filename):#将文件下载到本地
     urllib.request.urlretrieve(url, filename)

 if __name__ == '__main__':
     print('---图虫图片抓取器---')
     pageNo = int(input('请输入抓取页面的数字后缀(输入q退出):'))
     #url汉字编码处理
     url = 'http://tuchong.com/tags/{}/?page={}'.format(\
                 urllib.parse.quote('人像'), str(pageNo))
     #获取页面HTML文本
     html = getHtml(url)

     #解析HTML文本,得到二级网页的地址(根网页缩略图所指向的链接)
     rePage = r'http://tuchong.com/\d+/\d+/|http://\w+(?<!photos).tuchong.com/\d+/'
     pages = re.findall(rePage, html)
     pages = list(set(pages))

     #解析二级网页,下载其中的图片
     for page in pages:
         print('当前网页:', page)
         html2 = getHtml(page)#取得二级网页内容
         #解析二级网页中图片地址的正则表达式
         rePic = r'http://photos.tuchong.com/.+/f/.+\.jpg'
         pics = re.findall(rePic, html2)
         pics = list(set(pics))
         folder = 'D:/TuChongRenXiang/{}/{}'.format(pageNo, page[-8:-1])
         if not os.path.exists(folder):
             os.makedirs(folder)
             note = open(folder+'/note.txt', 'wt')#在每个文件夹下创建一个日志文件,记录下载地址
             note.write('来源网址:'+page+'\n图片原始地址列表:\n')
             for pic in pics:
                 note.write(pic+'\n')
             note.close()
         print('目标文件夹:', folder)
         time.sleep(1)#程序暂停一秒
         for pic in pics:
             print('当前下载:', pic)
             download(pic, folder+'/'+pic[-11:])
     print('下载结束。')

Python -- 网络编程 -- 抓取网页图片 -- 图虫网的更多相关文章

  1. Python -- 网络编程 -- 抓取网页图片 -- 豆瓣妹子

    首先分析页面URL,形如http://dbmeizi.com/category/[1-14]?p=[0-476] 图片种类对应编号: 1:'性感', 2:'有沟', 3:'美腿', 4:'小露点', ...

  2. Asp.net 使用正则和网络编程抓取网页数据(有用)

    Asp.net 使用正则和网络编程抓取网页数据(有用) Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </su ...

  3. python网络爬虫抓取网站图片

    本文介绍两种爬取方式: 1.正则表达式 2.bs4解析Html 以下为正则表达式爬虫,面向对象封装后的代码如下: import urllib.request # 用于下载图片 import os im ...

  4. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  5. 利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

  6. 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

    前几天给大家分享了利用Python网络爬虫抓取微信朋友圈的动态(上)和利用Python网络爬虫爬取微信朋友圈动态——附代码(下),并且对抓取到的数据进行了Python词云和wordart可视化,感兴趣 ...

  7. Python3简单爬虫抓取网页图片

    现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...

  8. 抓取网页图片的脚本(javascript)

    抓取网页图片的脚本(javascript) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24172223 脚本内容 (没有换行) ...

  9. 利用Python网络爬虫抓取微信好友的所在省位和城市分布及其可视化

    前几天给大家分享了如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,感兴趣的小伙伴可以点击链接进行查看.今天小编给大家介绍如何利用Python网络爬虫抓取微信好友的省位和城市,并且将 ...

随机推荐

  1. Android 3D游戏开发

    OpenGL ES(OpenGL Embedded System) Android 3D游戏开发技术宝典:OpenGL ES 2.0(android 3d游戏开发技术宝典 -opengl es 2.0 ...

  2. (并查集) Wireless Network --POJ --2236

    链接: http://poj.org/problem?id=2236 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...

  3. eclipse/myeclipse清除workspace

    打开Eclipse后,选择功能菜单里的 Windows -> Preferences->, 弹出对话框后,选择 General -> Startup and Shutdownwor ...

  4. Leader Election 选举算法

    今天讲一讲分布式系统中必不可少的选举算法. leader 就是一堆服务器中的协调者,某一个时刻只能有一个leader且所有服务器都承认这个leader. leader election就是在一组进程中 ...

  5. [MySQL Tips]:如何删除unique key约束

    [场景]: 假设最初创建了一个表bank,在street属性上添加了unique约束. create table branch( branch_name ) not null primary key, ...

  6. 用C#开发的双色球走势图(原创)值得园友拥有

    首先声明,个人纯粹无聊之作,不作商业用途. 我相信每个人都拥有一个梦想那就是有朝一日能中500W,这个也一直是我的梦想,并默默每一期双色球或多或少要贡献自己一点点力量,本人并不属于那种铁杆的彩票迷,每 ...

  7. SQL Server OS 调度

    --SQL SERVER OS 采用合作模式的线程调度模式,即除非Worker主动放弃CPU,否则SQL OS 不会强制剥夺其CPU,从而减少Context Switch --默认设置下,SQL SE ...

  8. NLayerAppV3-Infrastructure(基础结构层)的Data部分和Application(应用层)

    回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目. NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的:它包含了 ...

  9. js 利用数组实现类似于asp中的数据字典

    ---恢复内容开始--- 首先声明一个数组 var dictNew=new Array; var key; var value; for (var i = 0; i <50; i++) { // ...

  10. STM32的时钟配置随笔

    以前使用STM32都是使用库函数开发,最近心血来潮想要使用寄存器来试试手感,于是乎便在工作之余研究了一下STM32F4的时钟配置,在此将经历过程写下来作为锻炼,同时也供和我一样的新手参考,如有错误或者 ...