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 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
Python Pandas找到缺失值的位置方法
Apr 12 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
利用Python查看微信共同好友功能的实现代码
Apr 24 Python
python__name__原理及用法详解
Nov 02 Python
Python之Django自动实现html代码(下拉框,数据选择)
Mar 13 Python
Python实现代码块儿折叠
Apr 15 Python
python 追踪except信息方式
Apr 25 Python
keras小技巧——获取某一个网络层的输出方式
May 23 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
pw的一个放后门的方法分析
2007/10/08 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
php输出指定时间以前时间格式的方法
2015/03/21 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
利用jsonp跨域调用百度js实现搜索框智能提示
2016/08/24 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
Vue组件的使用教程详解
2018/01/05 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
pandas多级分组实现排序的方法
2018/04/20 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
Python中最好用的命令行参数解析工具(argparse)
2019/08/23 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
Python中Qslider控件实操详解
2021/02/20 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
八一慰问活动方案
2014/02/07 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
如何利用pygame实现打飞机小游戏
2021/05/30 Python