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随机生成信用卡卡号的实现方法
May 14 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
Python通过future处理并发问题
Oct 17 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python递归函数绘制分形树的方法
Jun 22 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
详解Python字典小结
Oct 20 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
python实现顺时针打印矩阵
Mar 02 Python
简单了解Python matplotlib线的属性
Jun 29 Python
全网非常详细的pytest配置文件
Jul 15 Python
python如何利用cv2.rectangle()绘制矩形框
Dec 24 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中的时间显示
2007/01/18 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
2014/03/12 PHP
php实现文件下载实例分享
2014/06/02 PHP
php判断是否连接上网络的方法实例详解
2016/12/14 PHP
Yii2下点击验证码的切换实例代码
2017/03/14 PHP
event.srcElement 用法笔记e.target
2009/12/18 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript重写alert方法的实例代码
2013/03/29 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
老生常谈JavaScript 正则表达式语法
2016/08/20 Javascript
vue  自定义组件实现通讯录功能
2018/09/30 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Numpy之文件存取的示例代码
2018/08/03 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
从0开始的Python学习016异常
2019/04/08 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
20行python代码实现人脸识别
2019/05/05 Python
python爬虫刷访问量 2019 7月
2019/08/01 Python
网络体系结构及协议的定义
2014/03/13 面试题
销售工作岗位职责
2013/12/24 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
公证书标准格式
2014/04/10 职场文书
加油口号大全
2014/06/13 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
药店采购员岗位职责
2014/09/30 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
党员承诺书格式范文
2015/04/28 职场文书
高中生社会实践心得体会
2016/01/14 职场文书
python前后端自定义分页器
2022/04/13 Python