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创建和删除目录的方法
Apr 29 Python
小小聊天室Python代码实现
Aug 17 Python
python 获取文件下所有文件或目录os.walk()的实例
Apr 23 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
Jun 04 Python
对python中的try、except、finally 执行顺序详解
Feb 18 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
Python中请不要再用re.compile了
Jun 30 Python
tensorflow 实现数据类型转换
Feb 17 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
python脚本第一行如何写
Aug 30 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利用iframe实现无刷新文件上传功能的代码
2011/09/29 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
smarty模板引擎之配置文件数据和保留数据
2015/03/30 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
jQuery Ajax提交表单查询获得数据实例代码
2012/09/19 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
Javascript ParentNode和ChildNode接口原理解析
2020/03/16 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
Python实现合并字典的方法
2015/07/07 Python
浅析PHP与Python进行数据交互
2018/05/15 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
解决python3 pika之连接断开的问题
2018/12/18 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
芭比波朗加拿大官方网站:Bobbi Brown Cosmetics CA
2020/11/05 全球购物
大学毕业后的十年规划
2014/01/07 职场文书
运动会广播稿500字
2014/01/28 职场文书
行政部岗位职责范本
2014/03/13 职场文书
小学五年级学生评语
2014/04/22 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
鲁冰花观后感
2015/06/10 职场文书
python基础之爬虫入门
2021/05/10 Python
python之基数排序的实现
2021/07/26 Python