Python使用爬虫爬取静态网页图片的方法详解
作者:coder_Gray 发布时间:2021-02-18 20:07:58
本文实例讲述了Python使用爬虫爬取静态网页图片的方法。分享给大家供大家参考,具体如下:
爬虫理论基础
其实爬虫没有大家想象的那么复杂,有时候也就是几行代码的事儿,千万不要把自己吓倒了。这篇就清晰地讲解一下利用Python爬虫的理论基础。
首先说明爬虫分为三个步骤,也就需要用到三个工具。
① 利用网页下载器将网页的源码等资源下载。
② 利用URL管理器管理下载下来的URL
③ 利用网页解析器解析需要的URL,进而进行匹配。
网页下载器
网页下载器常用的有两个。一个是Python自带的urllib2模块;另一个是第三方控件requests。选用哪个其实差异不大,下一篇将会进行实践操作举例。
URL管理器
url管理器有三大类。
① 内存:以set形式存储在内存中
② 存储在关系型数据库mysql等
③ 缓存数据库redis中
网页解析器
网页解析器一共有四类:
1.正则表达式,不过对于太复杂的匹配就会有些难度,属于模糊匹配。
2.html.parser,这是python自带的解析工具。
3.Beautiful Soup,一种第三方控件,顾名思义,美味的汤,用起来确实很方便,很强大。
4.lxml(apt.xml),第三方控件。
以上的这些全部属于结构化解析(DOM树)
什么式结构化解析(DOM)?
Document Object Model(DOM)是一种树的形式。
Beautiful Soup的语法
html网页—>创建BeautifulSoup对象—>搜索节点 find_all()/find()—>访问节点,名称,属性,文字等……
Beautiful Soup官方文档
实现代码
说过了理论基础,那么现在就来实践一个,要爬取一个静态网页的所有图片。
这里使用的网页下载器是python自带的urllib2,然后利用正则表达式匹配,输出结果。
以下为源码:
//引入小需要用到的模块
import urllib2
import re
def main():
//利用urllib2的urlopen方法,下载当前url的网页内容
req = urllib2.urlopen('http://www.imooc.com/course/list')
//将网页内容存储到buf变量中
buf = req.read()
//将buf中的所有内容与需要匹配的url进行比对。这里的正则表达式是根据静态网页的源码得出的,查看静态网页源码开启开发者模式,按F12即可。然后确定图片块,查看对应源码内容,找出规律,编写正则表达式。
listurl = re.findall(r'src=.+\.jpg',buf)
i = 0
//将结果循环写入文件
for url in listurl:
f = open(str(i)+'.jpg','w')
req = urllib2.urlopen(url[5:])
buf1 = req.read()
f.write(buf1)
i+=1
if __name__ == '__main__':
main()
至此一个静态网页的图片爬虫就完成了,下面来看下效果。
这是静态网页:
以下是爬取的结果:
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/coder_gray/article/details/77942372
猜你喜欢
- python map函数map()函数map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依
- 问题你想反方向迭代一个序列解决方案使用内置的 reversed() 函数,比如:>>> a = [1, 2, 3, 4]&
- 新建图像文件后选Channels面板,新建Alpha1通道:输入文字; &nbs
- 本文实例为大家分享了vue实现下拉菜单树的具体代码,供大家参考,具体内容如下效果:使用 Vue-Treeselect 实现建议通过npm安装
- 作为一个诞生已有 30 余年的编程语言,Python 的流行度在近几年迎来了 * 性的增长。为了方便大家能够更好的采用 Python,利用该语
- 前言本篇来学习pytest中内置fixture中临时目录的使用tmpdirtmpdir作用范围是函数级别,创建临时文件供单个测试点调用# -
- I. 前言在前面的一篇文章PyTorch搭建LSTM实现时间序列预测(负荷预测)中,我们利用LSTM实现了负荷预测,但我们只是简单利用负荷预
- PDO::execPDO::exec — 执行一条 SQL 语句,并返回受影响的行数(PHP 5 >= 5.1.0, PECL pdo
- 背景基于现在微服务或者服务化的思想,我们大部分的业务逻辑处理函数都是长这样的:比如grpc服务端:func (s *Service) Get
- 在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。本章节我们将向大家介绍
- 在开发中有个需求是一个选择城市的列表,看了看做成 * 联动好像不是特别方便 还是做成一整页可以按导航选取的就可以了话不多说开始上码我用的是va
- caller 属性返回一个对函数的引用,该函数调用了当前函数。functionName.caller functionName 对象是所执行
- 目录系列教程一、用户管理1、用户账号2、增加删除账号3、破解管理账号密码二、授权管理1、授权2、查询授权3、收回授权总结系列教程MySQL系
- 限制只能输入数字// -----------------------------------------------------------
- 一、前言今天学习视频时课后作业是找出1000以内既是素数又是回文数的数,写代码这个很容易,结果一运行遇到了bug,输出结果跟预期不一样,调试
- 代码很简单,这里就不多废话了,直接奉上:$(function(){ var w=
- 问题背景问题背景是在,由于视频采集端使用的是H264编码采集的裸流,而网络流媒体大多是以FLV为主的直播方式进行的,为了实现实时直播,当前是
- 文件目录层级一、文件读取的绝对路径和相对路径用相对路径和绝对路径读取上一层目录的文件、下一层目录的文件及读取同层级的文件。# @File :
- JQuery,mootools,Ext等类库在这部分实现得非常艰辛,盘根错节地动用一大堆方法,因此想把这部分抠出来难度很大。深入研究它们的实
- 结果然后直接放源码:import cv2 as cvsource = cv.imread("zhaopian.jpg")