Python爬虫实例(4)-用urllib、re和正则表达式爬取网页图片
2017-12-14 15:34
971 查看
python的第三方包极多种,尽量多看多用,对开发者来说是很好的。在爬虫领域,请求网页,除了requests包之外,还有urllib.request模块;获取网页图片对应src的方法,除了BeautifulSoup之外,还有re模块的正则表达式。
正则表达式也是从html获取关键代码片段的方法,比较复杂,没有美丽汤模块那么好用;但是,了解一下还是必要的。本实例,还是从百度贴吧上爬取一个网页的多张图片,代码如下所述。
从本例中,所用到的知识点有:
1、urllib.requests模块,用Requests、openurl来请求网页,用read()来读取出html,用urlretrieve来直接下载文件到制定目录;
2、re包中,用re-compile-findall来获取图片对应的src属性代码,这是一个常用的套路,类似于BeautifulSoup的soup-find_all-get三连击;
3、在正则表达式中,对于下面的长代码,直接用https://[^\s]*?.jpg来代替就可以了。具体每个字符的含义,可以自行查表,但是这个短代码串,是可以在很多爬虫中通用的。牢牢记住,再来变通。
https://imgsa.baidu.com/forum/w%3D580/sign=4c9a9f3955df8db1bc2e7c6c3921dddb/abf17d1ed21b0ef40b2f06ffd6c451da80cb3e7a.jpg
4、此外,还有一些小问题。例如,对于html此处还要用decode来解码(具体原因还不清楚),Python在文件路径上只能识别首字母为大写的文件。这些小问题,就需要开发者在实际中慢慢体会了;
5、提供了将下载的图片命名为1,2,3…等数字的方法,即:将变量x插入到下载和命名过程,每执行一次for函数,x就自加一次即可。
爬虫之路慢慢其修远,吾将上下而求索。
正则表达式也是从html获取关键代码片段的方法,比较复杂,没有美丽汤模块那么好用;但是,了解一下还是必要的。本实例,还是从百度贴吧上爬取一个网页的多张图片,代码如下所述。
# -*- coding: utf-8 -*- #网上案例:https://www.cnblogs.com/abelsu/p/4540711.html #网上代码不能直接运行,需要修改 #导入所需第三方包。urllib.request用于请求网页,re用于正则表达式 import urllib.request import re #获取网页的html,与requests包一样的功能 def getHtml(url): response = urllib.request.Request(url, headers = header) page = urllib.request.urlopen(response) html = page.read() #urllib用read()读取html;requests包用text读取html print(html) return html #获取图片对应的src属性代码 def getImg(html): html=html.decode('utf-8') #通过re-compile-findall二连函数操作来获取图片src属性对应的代码 src = r'https://[^\s]*?\.jpg' imgre = re.compile(src) #re.compile(),可以把正则表达式编译成一个正则表达式对象 imglist = re.findall(imgre, html) #re.findall(),读取html中包含imgre(正则表达式)的数据,imglist是包含了所有src元素的数组 #用urlretrieve下载图片。图片命名为0/1/2...之类的名字 x = 0 for imgurl in imglist: #注意,这里的文件路径,每段路径的首字母一定要大写!!小写会识别出错 urllib.request.urlretrieve(imgurl, 'E:\Python-study-project\Test_img\B\%s.jpg' % x) x += 1 print(imgurl) header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'} html = getHtml("https://tieba.baidu.com/p/5439602441") getImg(html) print('OK')
从本例中,所用到的知识点有:
1、urllib.requests模块,用Requests、openurl来请求网页,用read()来读取出html,用urlretrieve来直接下载文件到制定目录;
2、re包中,用re-compile-findall来获取图片对应的src属性代码,这是一个常用的套路,类似于BeautifulSoup的soup-find_all-get三连击;
3、在正则表达式中,对于下面的长代码,直接用https://[^\s]*?.jpg来代替就可以了。具体每个字符的含义,可以自行查表,但是这个短代码串,是可以在很多爬虫中通用的。牢牢记住,再来变通。
https://imgsa.baidu.com/forum/w%3D580/sign=4c9a9f3955df8db1bc2e7c6c3921dddb/abf17d1ed21b0ef40b2f06ffd6c451da80cb3e7a.jpg
4、此外,还有一些小问题。例如,对于html此处还要用decode来解码(具体原因还不清楚),Python在文件路径上只能识别首字母为大写的文件。这些小问题,就需要开发者在实际中慢慢体会了;
5、提供了将下载的图片命名为1,2,3…等数字的方法,即:将变量x插入到下载和命名过程,每执行一次for函数,x就自加一次即可。
爬虫之路慢慢其修远,吾将上下而求索。
相关文章推荐
- Python爬虫urllib2笔记(三)之使用正则表达式提取百度贴吧网页中的楼主发的图片
- python实例1--用正则表达式爬取静态网页上的图片
- python的re正则表达式实例代码
- Python爬虫爬取一个网页上的图片地址实例代码
- python使用正则表达式编写网页小爬虫
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
- Python学习笔记 第二部分 - 正则表达式 与 爬虫小实例(抓取豆瓣电影中评分大于等于8分的影片)
- python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
- Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码
- [python爬虫] 正则表达式使用技巧及爬取个人博客实例
- asp.net正则表达式提取网页网址、标题、图片实例以及过滤所有HTML标签实例
- 【实例】python re 正则表达式 同时选择带有“是”和“的”句子
- python爬虫入门(2)re模块-正则表达式
- python 爬虫004-使用urllib2与正则表达式扒取糗事百科新鲜页首页帖子
- Python 爬虫实例——网页图片爬取
- Python爬虫实践(七):正则表达式(2) re模块的使用
- 初学Python----urllib2模块与正则表达式组合而成的小爬虫
- 利用python正则表达式抓取网页中的图片到本地
- Python爬虫之正则表达式基本用法实例分析
- python3爬虫(二) re模块与正则表达式