前言
什么是网络爬虫(也叫网络蜘蛛)?简单来说,是一种用来自动浏览万维网程序或脚本(网络爬虫的典型应用就是我们所熟知的搜索引擎)。既然如此,那么我们也可以写一个程序,用来自动浏览或者获取网页上的信息。本文将介绍利用python自带库编写一个简单的爬虫程序来获取网络信息。
进群:548377875 即可获取数十套PDF书籍哦!限前五十套呢!
准备
本次爬取实例可能涉及以下知识:
- python基础知识
- urllib库使用
- http基本知识
- html/js基本知识
- 正则表达式
环境准备:
- linux(windows基本适用)
- python3
- chrome浏览器
爬取目标
本次爬取的目标是知乎话题下的图片。
分析
以知乎话题你有哪些压箱底的表情包?为例
(链接地址:https://www.zhihu.com/question/48132860):
用chrome浏览器打开该链接。鼠标右键-检查元素,在elements页移动鼠标,当鼠标移动到某元素时,页面会被选中,因此我们可以找到第一张图片的img标签,而在标签中,我们可以找到图片的URL地址,复制URL地址,在浏览器打开,我们就看到了需要下载的表情包了。
至此,整体思路就很简单了:访问话题页--找到img标签--获取图片URL地址--下载图片。
查找链接
#!/usr/bin/python3 #coding=utf-8 import urllib.request as request import urllib.parse as parse import string import sys import re import os import urllib.error as error ''' 获取url中的图片 url:链接地址 dirpath:保存路径 ''' def getUrlImage(url,dirpath): dldNum=0 #存储目录不存在时,创建目录 if not os.path.isdir(dirpath): os.makedirs(dirpath) data = request.urlopen(url).read() page_data = data.decode('gbk','ignore') #获取img标签数据 page_image = re.compile('获取img标签中的图片 for image in page_image.findall(page_data): #匹配数据中的图片 pattern = re.compile(r'^https://.*.(jpg|png|gif|jpeg)$') if pattern.match(image): print (image) try: extension = GetFileNameAndExt(image) #读取图片内容 image_data = request.urlopen(image).read() image_path = dirpath+'/'+str(dldNum)+extension dldNum += 1 print(image_path) #保存图片 with open(image_path,'wb') as image_file: image_file.write(image_data) image_file.close() except error.URLError as e: print('Download Failed') ''' 获取文件名中的扩展名 ''' def GetFileNameAndExt(filename): (filepath,tempfilename) = os.path.split(filename); (shotname,extension) = os.path.splitext(tempfilename); return extension ''' 入口函数 带两个参数 参数1:话题链接地址 参数2:图片保存路径 ''' if __name__ == "__main__": if(len(sys.argv) < 2): print("usage:./download_spider.py url savePath") else: print("the url is "+str(sys.argv[1])) print("the save path is "+str(sys.argv[2])) url = sys.argv[1] savePath = sys.argv[2] getUrlImage(url,savePath)
运行
有两个参数,第一个参数是url,即话题的链接,第二个参数是所要保存图片的路径。
在linux下运行,可以看到正在不断保存话题图片
./getZhiHuImage.py https://www.zhihu.com/question/48132860 ./test
程序执行完成后可以在目的目录下发现下载好的图片,接下来就可以开心地去斗图啦。
下载结果
下载结果2
最后说两句
本文仅简单利用了python自带urllib库完成了话题图片的获取工作,但更多时候,爬取网络资源要更困难得的多,要获取的内容也不像本文例子中那么明显易得到,比如可能需要模拟登录,验证码识别,伪装成浏览器,去重等等,这里不再展开。但是Python中自带urllib及urllib2 库,基本上能满足一般的页面抓取了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。