30行代码实现图片爬虫实践

发表于:2021-3-09 09:55

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

#
Python
  一个小案例,实现爬取网站里面的图片,包括源码及实现思路。
  一.还原手工操作
  所谓爬取页面图片,正常人手动操作可以分为两步:
  1.打开页面
  2.选中图片下载到指定文件夹
  用代码实现的话可以节省掉每次下载图片的操作,运行代码实现批量下载。
  二 .设计代码实现
  步骤一  导入相关库操作
import urllib  #导入urllib包
import urllib.request#导入urllib包里的request方法
import re #导入re正则库
  步骤二 定义解析页面 load_page()
  这个函数实现打开传入的路径并将页面数据读取出来,实现代码,包括发送请求,打开页面,获取数据。
  代码实现:
def load_page(url):
request=urllib.request.Request(url)#发送url请求
    response=urllib.request.urlopen(request)#打开url网址
    data=response.read()#读取页面数据
    return data#返回页面数据
  步骤三 定义get_image()函数
  首先利用正则表达式匹配图片路径并存到数组中。
  其次遍历数组实现图片下载操作。
  代码实现:
def get_image(html):
    regx=r'http://[\S]*jpg' #定义正则匹配公式
    pattern=re.compile(regx)#构造匹配模式,速度更快
    get_image=re.findall(pattern,repr(html))#repr()将内容转化为字符串形式,findall列表形式展示正则表达式匹配的结果
    num=1  #定义变量控制循环
    for img in get_image:  #定义变量遍历数组
        image=load_page(img)#将图片路径传入加载函数
        with open('F:\\photo\\%s.jpg'%num,'wb') as fb:  #以只读方式打开图片并命名
            fb.write(image)  #写入内容
            print('正在下载第%s张图片'%num)
            num=num+1  #变量递增
        print("下载完成")
  步骤四 函数调用
#调用函数
url='http://p.weather.com.cn/2019/10/3248439.shtml'  #传入url路径
html=load_page(url)#加载页面
get_image(html)#图片下载
  关键单词释义
  如果第一次接触爬虫代码,相信有几个单词大家很陌生,为了方便记忆我把他们归类到一起加深印象,你也可以拿出一张白纸试着努力回忆着。
  1.爬虫协议库ulrlib、urllib.request
  2.正则匹配库rb
  3.发送请求方法request()
  4.打开页面方法urlopen()
  5.读取数据方法read()
  6.正则表达式-所有图片【\S】*.jpg
  7.匹配模式定义compile()
  8.查找匹配findall()
  9.循环遍历语句 for a in b
  10.打开文件 并命名 with open()... as fb
  11.写到...  write*()
  12.输出语句 print()
  到现在为止可以把我上面的代码在pycharm中打开尝试着运行起来吧!
  最后,有2个报错信息汇总供参考:
  1. module 'urllib' has no attribute 'requset'
  定位到当行语句,发现request 单词拼写错误。
  2. 没有报错,但是图片没有下载成功
  重新检查代码,发现正则表达式写的有错误,记住是大写的S修改完之后看效果。

      版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号