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中声明只包含一个元素的元组数据方法
Aug 25 Python
Python中实现对Timestamp和Datetime及UTC时间之间的转换
Apr 08 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
python实现的多线程端口扫描功能示例
Jan 21 Python
简单学习Python多进程Multiprocessing
Aug 29 Python
PyQt5主窗口动态加载Widget实例代码
Feb 07 Python
Python延时操作实现方法示例
Aug 14 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
将python依赖包打包成window下可执行文件bat方式
Dec 26 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 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开源建站平台小结
2010/04/22 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
jQuery学习2 选择器的使用说明
2010/02/07 Javascript
jquery 学习笔记一
2010/04/07 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
详解angular element()方法使用
2017/04/08 Javascript
Javascript实现页面滚动时导航智能定位
2017/05/06 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
微信小程序实现左右联动的实战记录
2018/07/05 Javascript
详解Axios统一错误处理与后置
2018/09/26 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
Python内置函数locals和globals对比
2020/04/28 Python
如何一键升级Python所有包
2020/11/05 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
蔻驰法国官网:COACH法国
2018/11/14 全球购物
小学教师学期末自我评价
2013/09/25 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
公司离职证明范本
2014/10/17 职场文书
车队安全员岗位职责
2015/02/15 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python