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写的ARP攻击代码实例
Jun 04 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
在Python操作时间和日期之asctime()方法的使用
May 22 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
菜鸟使用python实现正则检测密码合法性
Jan 05 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
Python调用飞书发送消息的示例
Nov 10 Python
python实现登录与注册系统
Nov 30 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
改造一台复古桌面收音机
2021/03/02 无线电
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
jquery列表拖动排列(由项目提取相当好用)
2014/06/17 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
Bootstrap.css与layDate日期选择样式起冲突的解决办法
2017/04/07 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
jquery中done和then的区别(详解)
2017/12/19 jQuery
使用rollup打包JS的方法步骤
2018/12/05 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
Node 模块原理与用法详解
2020/05/13 Javascript
用vue写一个日历
2020/11/02 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
使用python获取电脑的磁盘信息方法
2018/11/01 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
python 实现生成均匀分布的点
2019/12/05 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
如何获得EntityManager
2014/02/09 面试题
自立自强的名人事例
2014/02/10 职场文书
群众路线教育实践活动思想汇报(2014特荐篇)
2014/09/16 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
从零开始在Centos7上部署SpringBoot项目
2022/04/07 Servers