$python爬虫系列(1)——一个简单的爬虫实例

news/2024/7/19 11:31:38 标签: 爬虫, python

 

本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片。

1. 概述

本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片。下载图片的步骤如下:

  1. 获取网页html文本内容;
  2. 分析html中图片的html标签特征,用正则解析出所有的图片url链接列表;
  3. 根据图片的url链接列表将图片下载到本地文件夹中。

2. urllib+re实现

python">#!/usr/bin/python
# coding:utf-8
# 实现一个简单的爬虫,爬取百度贴吧图片
import urllib import re # 根据url获取网页html内容 def getHtmlContent(url): page = urllib.urlopen(url) return page.read() # 从html中解析出所有jpg图片的url # 百度贴吧html中jpg图片的url格式为:<img ... src="XXX.jpg" width=...> def getJPGs(html): # 解析jpg图片url的正则 jpgReg = re.compile(r'<img.+?src="(.+?\.jpg)" width') # 注:这里最后加一个'width'是为了提高匹配精确度 # 解析出jpg的url列表 jpgs = re.findall(jpgReg,html) return jpgs # 用图片url下载图片并保存成制定文件名 def downloadJPG(imgUrl,fileName): urllib.urlretrieve(imgUrl,fileName) # 批量下载图片,默认保存到当前目录下 def batchDownloadJPGs(imgUrls,path = './'): # 用于给图片命名 count = 1 for url in imgUrls: downloadJPG(url,''.join([path,'{0}.jpg'.format(count)])) count = count + 1 # 封装:从百度贴吧网页下载图片 def download(url): html = getHtmlContent(url) jpgs = getJPGs(html) batchDownloadJPGs(jpgs) def main(): url = 'http://tieba.baidu.com/p/2256306796' download(url) if __name__ == '__main__': main()

运行上面脚本,过几秒种之后完成下载,可以在当前目录下看到图片已经下载好了:
这里写图片描述

3. requests + re实现

下面用requests库实现下载,把getHtmlContent和downloadJPG函数都用requests重新实现。

python">#!/usr/bin/python
# coding:utf-8
# 实现一个简单的爬虫,爬取百度贴吧图片
import requests import re # 根据url获取网页html内容 def getHtmlContent(url): page = requests.get(url) return page.text # 从html中解析出所有jpg图片的url # 百度贴吧html中jpg图片的url格式为:<img ... src="XXX.jpg" width=...> def getJPGs(html): # 解析jpg图片url的正则 jpgReg = re.compile(r'<img.+?src="(.+?\.jpg)" width') # 注:这里最后加一个'width'是为了提高匹配精确度 # 解析出jpg的url列表 jpgs = re.findall(jpgReg,html) return jpgs # 用图片url下载图片并保存成制定文件名 def downloadJPG(imgUrl,fileName): # 可自动关闭请求和响应的模块 from contextlib import closing with closing(requests.get(imgUrl,stream = True)) as resp: with open(fileName,'wb') as f: for chunk in resp.iter_content(128): f.write(chunk) # 批量下载图片,默认保存到当前目录下 def batchDownloadJPGs(imgUrls,path = './'): # 用于给图片命名 count = 1 for url in imgUrls: downloadJPG(url,''.join([path,'{0}.jpg'.format(count)])) print '下载完成第{0}张图片'.format(count) count = count + 1 # 封装:从百度贴吧网页下载图片 def download(url): html = getHtmlContent(url) jpgs = getJPGs(html) batchDownloadJPGs(jpgs) def main(): url = 'http://tieba.baidu.com/p/2256306796' download(url) if __name__ == '__main__': main()

输出:和前面一样。

转载于:https://www.cnblogs.com/Jeremy2001/p/10203326.html


http://www.niftyadmin.cn/n/1471366.html

相关文章

astride包括那几个维度_《爆款文案》:75个案例,18种方法,4大维度教你写出爆款文案...

很多文案小白都想在文案创作的迷茫期得到某位大佬的真传&#xff0c;以期能平顺的跨过那道最难的坎儿。而常做文案工作的码字工人&#xff0c;又希望自己码的稿子在按下确定键后瞬间成为爆款。但是我们都知道&#xff0c;这世上没有哪件事是可以轻易成功的&#xff0c;如果有&a…

android studio 重建项目,在Android Studio中清理项目与重建项目与运行项目

使用gradle,更具体地说,使用gradle包装器,您可以通过在从项目的根目录运行时添加信息标记来确切了解每个操作.将向您展示可从root项目运行的主要任务./gradlew任务将显示项目中可用的所有任务./gradlew任务 – 所有您可以通过使用找到有关任何任务的更多信息./gradlew help --t…

你必须知道的get与post的真正区别

我们会经常看到有人问&#xff1a;http协议中GET请求和POST请求有什么区别~&#xff1f; 这个问题看似很简单&#xff0c;但是不同程度的人会回答出不同的结果。在公司的面试中&#xff0c;也会经常的问及类似这样的问题&#xff0c;看似很简单&#xff0c;但是不同层次的人会回…

什么是GIL锁以及作用

全局解释锁&#xff0c;每次只能一个线程获得cpu的使用权&#xff1a;为了线程安全&#xff0c;也就是为了解决多线程之间的数据完整性和状态同步而加的锁&#xff0c;因为我们知道线程之间的数据是共享的。 转载于:https://www.cnblogs.com/apollo1616/p/10206068.html

直接导入excel 知乎_SPSS篇—Excel、文本数据数据格式的导入

一个一个将数据录入既费时又费力&#xff0c;而且我们在工作学习中通常会得到Excel数据或者文本数据&#xff0c;那么对于这些类型的数据&#xff0c;我们又该如何快速导入到SPSS中呢&#xff1f;1 Excel 数据导入首先将需要导入的Excel文件放到电脑中易于找到的位置。Step 1&a…

五子棋游戏html5界面设计,HTML5制作黑白五子棋游戏教程

今天分享一个只用css和js代码开发的黑白五子棋游戏&#xff0c;我们把代码进行解析&#xff0c;希望对大家可以有所帮助先看看效果图&#xff1a;HTML5制作黑白五子棋游戏教程js代码&#xff1a;定义canvas及黑白棋变量var canvas;var context;var isWhitetrue;//设置是否该轮到…

数据nc文件_NetCDF(nc)数据读取与格式转换

NetCDF(nc)数据读取与格式转换NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research&#xff0c;UCAR)的 Unidata 项目科学家针对科学数据的特点开发的&#xff0c;是一种面向数组型并适于网络共享的数…

CentOS 7 网络配置详解

今天在一台PC上安装了CentOS 7&#xff0c;当时选择了最小安装模式&#xff0c;安装完成后马上用ifconfig查看本机的ip地址&#xff08;局域网已经有DHCP&#xff09;&#xff0c;发现报错,提示ifconfig命令没找到。 ?123[rootcentos1 ~]# ifconfig-bash: ifconfig: command n…