Python制作豆瓣图片的爬虫
作者:是与非 发布时间:2021-11-24 05:53:05
标签:Python,豆瓣爬虫
前段时间自学了一段时间的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会发现
都是以“=”等号开头,后面接双引号,中间都是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网页和下载具体的图片。
接下来就可以在保存路径对应的文件夹中中看到下载的图片了
至此,爬虫告一段落,离大佬的路还远得很,继续加油!!
来源:http://www.cnblogs.com/establish/p/8127784.html


猜你喜欢
- 这两天准备复习一下java,所以写一个采用dubbo的商场项目练练手,却卡第一个测试上,启动provider服务和Consumer服务,请求
- 本文是基于Apache poi类实现的批量导入读取Excel文件,所以要先引入Apache poi的依赖<dependency>
- 使用正则表达式限制特殊字符的个数package com.l.dubbo.service; import java.util.HashSet;
- 比较说明1、break和continue是python两个关键字2、break和continue只能用在循环中3、break是终止循环的执行
- 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取
- javascript sort()排序用法sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。
- 广州4.18书友会主题的内容提纲自己参与撰写,同时还参与组织和主持。通过这次的深入参与,我发现胡晓同学能坚持下来多不容易,先赞下。由于天公不
- 目录当前时间实例1:实例2:指定时间戳实例1:实例2:总结我们将会启用到time库:当前时间实例1:import time# 获得当前时间时
- 前言利用SVD是可以对图像进行压缩的,其核心原因在于,图像的像素之间具有高度的相关性。代码# -*- coding: utf-8 -*-
- 一、测试模型下面这部分来自于某书籍资料,拿过来,按需参考一下:测试模型(1)线性测试1、概念:通过录制或编写对应应用程序的操作步骤产生的线性
- 在开发过程中,很多时候我们有分割字符串的需求,即把一个字符串按照某种分割符进行切割。在 Go 语言中,分割字符串我们可以分为几种情况,分别为
- 目录注册组件添加组件源代码可拖放文本框允许用户通过拖动备选项至文本框来确定输入,其实也可以说是 combobox 的一种变形。 与 comb
- mac下安装mysql8.0.11时 要求输入密码 之后想修改密码注意 此方法适用于mac下的mysql8.0.11 其他版本不一定相同1.
- /** * Ajax分页功能 * 在需要分页的地方添加<ul class="pagination"><
- 向量点乘 (dot) 和对应分量相乘 (multiply) :>>> aarray([1, 2, 3])>>&
- 今天在一个QQ群中看到有人在问一个进度条的实现方式,当时因为工作时间,需求相对也比较紧,只是简单的说了一下可以通过CSS的边框属性和背景属性
- 本文实例讲述了sql server实现递归查询的方法示例。分享给大家供大家参考,具体如下:有时候面对树结构的数据时需要进行递归查询,网上找了
- 本文为大家分享了Python实现自己下载音乐统计的具体代码,供大家参考,具体内容如下今天看Python实例,学习了如何对文件进行操作,突然想
- python中关于删除list中的某个元素,一般有三种方法:remove、pop、del:1.remove: 删除单个元素,删除首个符合条件
- Lists列表可以包含不同类型的元素,甚至是Lists,但是通常是同一个类型的。if __name__ == '__main__