Python制作豆瓣图片的爬虫


Posted in Python onDecember 28, 2017

前段时间自学了一段时间的Python,想着浓一点项目来练练手。看着大佬们一说就是爬了100W+的数据就非常的羡慕,不过对于我这种初学者来说,也就爬一爬图片。

我相信很多人的第一个爬虫程序都是爬去贴吧的图片,嗯,我平时不玩贴吧,加上我觉得豆瓣挺良心的,我就爬了豆瓣首页上面的图片。其实最刚开始是想爬全站,后来一想我这简直是脑子犯抽,全站的图片爬下来得有多少,再说这个只是练一下手,所以就只爬取了首页上的图片。废话不多说 开始代码。

首先是主文件的代码:

import re
from html_downloder import HtmlDownloader
from html_downloder import Image

"'起始URL'"
url = "https://www.douban.com"
"'保存目录'"
image_path = "F:\source\Python\爬虫\ImageGet\Image%s.jpg"
"'定义实体类'"
downloader = HtmlDownloader()
html = downloader.download(url)
"'SaveFile(html, html_path)'"
html = html.decode('utf-8')
"'正则表达式'"
reg1 = r'="(https://img[\S]*?[jpg|png])"'
"'提取图片的URL'"
dbdata = re.findall(reg1, html)
imgsave = Image()

"'下载保存图片'"
imgsave.ImageGet(dbdata, image_path)

我们打开豆瓣首页然后看一下里面图片的url会发现

Python制作豆瓣图片的爬虫

Python制作豆瓣图片的爬虫

都是以“=”等号开头,后面接双引号,中间都是https://img,末尾以双引号结束。

因此我们的正则表达式可以写成 reg1 = r'="(https://img[\S]*?[jpg|png])"'

在这个表达式中"[]"中括号里面的东西会作为一个整体,其中[\S]表示大小写字母和数字,[jpg|png]表示以png结尾或者jpg结尾(在这次爬虫中并没有包括gif,因为打开gif的url发现是空白)。

然后是html_downloder.py的代码:

# file: html_downloader.py
 
 import urllib.request
 import urllib.error
 import time

 class HtmlDownloader(object):
  def download(self, url):
   if url is None:
    return None
   try:
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64)'}
    "'发出请求'"
    request = urllib.request.Request(url=url, headers=header)
    "'获取结果'"
    response = urllib.request.urlopen(url)
   except urllib.error.URLError as e:
    if hasattr(e, "code"):
     print(e.code)
    if hasattr(e, "reason"):
     print(e.reason)
   if response.getcode() != 200:
    return None
   html = response.read()
   response.close()
   return html

 class Image (object):
  def ImageGet(self, imageurl, image_path):
   x = 0
   for li in imageurl:
    urllib.request.urlretrieve(li, image_path % x)
    x = x + 1
    "'休眠5s以免给服务器造成严重负担'"
    time.sleep(5)
这个文件的代码主要是负责下载html网页和下载具体的图片。

接下来就可以在保存路径对应的文件夹中中看到下载的图片了

Python制作豆瓣图片的爬虫

至此,爬虫告一段落,离大佬的路还远得很,继续加油!!

Python 相关文章推荐
Python实现的ini文件操作类分享
Nov 20 Python
详解Python中dict与set的使用
Aug 10 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
基于Python函数的作用域规则和闭包(详解)
Nov 29 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
使用python绘制温度变化雷达图
Oct 18 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
java字符串格式化输出实例讲解
Jan 06 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
Python实现位图分割的效果
Nov 20 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 #Python
python编程实现12306的一个小爬虫实例
Dec 27 #Python
python导出chrome书签到markdown文件的实例代码
Dec 27 #Python
Python类的继承和多态代码详解
Dec 27 #Python
快速查询Python文档方法分享
Dec 27 #Python
Java及python正则表达式详解
Dec 27 #Python
python matplotlib画图实例代码分享
Dec 27 #Python
You might like
聊天室php&mysql(二)
2006/10/09 PHP
浅析php中array_map和array_walk的使用对比
2016/11/20 PHP
JS常见问题整理(持续更新)
2013/08/06 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
JavaScript中Array的实用操作技巧分享
2016/09/11 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
nodejs集成sqlite使用示例
2017/06/05 NodeJs
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[04:09]2018年度DOTA2社区贡献奖-完美盛典
2018/12/16 DOTA
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
Python 转换RGB颜色值的示例代码
2019/10/13 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
校园广播稿500字
2014/02/04 职场文书
比赛口号大全
2014/06/10 职场文书
党员个人总结范文
2015/02/14 职场文书
爱岗敬业事迹材料
2019/06/20 职场文书
python可视化之颜色映射详解
2021/09/15 Python