• 12
  • 13
分享
  • 30行代码实现图片爬虫实践——软件测试圈
  • 曼倩诙谐 2021-03-15 10:10:34 字数 1667 阅读 1493 收藏 13

  一个小案例,实现爬取网站里面的图片,包括源码及实现思路。

  一.还原手工操作

  所谓爬取页面图片,正常人手动操作可以分为两步:

  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-1.png

  1. module 'urllib' has no attribute 'requset'

  定位到当行语句,发现request 单词拼写错误。

  2. 没有报错,但是图片没有下载成功

1-2.png

  重新检查代码,发现正则表达式写的有错误,记住是大写的S修改完之后看效果。

1-3.png


作者:桃子   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   1 月 4 日,赛力斯与华为数字能源技术有限公司(下称“华为数字能源”)共同宣布,双方在深圳签署全面战略合作协议。据第一财经报道,有业内人士称,华为在充电方面可能会打造一个联盟,以提高充电桩的利用率,加速走向盈利。  根据此前官方公布的消息,赛力斯与华为数字能源将在新能源汽车智能电动部件产品、新能源汽车平台技术开发与应用、新能源汽车充电网络建设与运营、新能源汽车国际化等领域展开全面战略合作。  在充电网络超充联盟及服务方面,赛力斯与华为数字能源将携手推进新能源汽车充电超充网络部署,实现平台互联互通。在智能电动部件产品方面,双方将联合研发与制造电驱动、车载充电、增程系统、智能光伏、底盘融合系...
            0 0 376
            分享
          • 我希望大家能认真思考后给出一个属于自己的答案,无论你是新手入门,还是资深专家。回答这个问题请不要凭一腔热血,也不用过分消极,别总和钱挂钩,平心而论即可,就当是对这份职业的一个规划。01、先说说我的测试之路…我个人年过30,参加工作至今从事时间最长的就是测试工程师职业,我内心深处很希望一直把这份职业长久的做下去。虽然我的技术并不出众,但最少我也有了一些经验和经历,虽然在如今测试行当的现状没有高深点技术的经验可能不太受待见,但最少我一直在坚持着,我会一直坚持到这个行当没我容身之处或者侥幸成为测试的终身职业者。在广东这些年,我见过不少与我同龄的测试人离开这个行当了,比较悲哀的是我遇到的离开者多数人都...
            0 0 700
            分享
          • 1.请做一下自我介绍吧面试题要点:考察你的语言表达能力,以及获取你的基本信息和大致情况。分析:包含内容有名字+工作经历+做过的项目。一定要提前准备好,保证表达的流畅。控制在1分钟左右。注意:不要说离职原因,不要说转行,不要给自己挖坑。--外企项目,英文自我介绍-内容也差不多。参考示例:我叫xxx,16年从xx学校xxx专业毕业,毕业至今从事测试工作,到现在有3年了。3年中我待过2家公司,第一家是一个x,主要业务是做xx的。我最近的一家公司吧,主要是做互联网金融业务的,它有web端和APP端的项目,我这两个项目都有参与测试。我负责的主要测试内容包括在web和APP端前端页面还没有完成之前,完成产...
            0 0 837
            分享
          •   合适,合适,合适!不接受任何反驳  但是我反对说,女生更适合测试,不适合开发的这种论调。  · 有人说女生更为心细,更有耐心,能够更好的找出bug;  · 有人说测试不用写代码,女生学更容易上手;  · 有人说做测试强度低,不用加班,对女生更友好。  或许在以前手工测试盛行的年代,有这样的看法还算正常,但是在2021年,测试行业不断升级变化的情况下,再这样说,就不适合了。  如果你是女生,想要衡量自己是否适合进入这个行业,首先要搞明白下面3点:  · 女生做软件测试所占的比例?前景如何?  · 女生做软件测试是否也有“35+”天花板?未来的出路是什么?  · 女生学习软件测试应该按照什么样...
            0 0 958
            分享
          • 读者提问:什么时候需要写测试日报,为什么要写测试日报,怎么写测试日报 ?阿常回答:什么时候需要写测试日报,为什么要写测试日报:1、刚入职场的测试新人,测试主管根据测试新人的工作表现(含测试日报),对新人做试用期转正考核;2、临近项目关键节点,需要给出测试交付物时,和项目组汇报当下测试进展,是否有遇到阻碍、项目是否有延期风险;3、测试进度受到阻碍,项目存在延期风险,需要及时和项目组反馈当前测试情况。怎么写测试日报:1、整体测试进度有无风险:进度正常无风险、低风险、中风险、高风险。2、列出所存在的风险及对应策略,需要谁提供帮助。3、所测试模块,用例执行 XX %,发现了 XX 个 BUG...
            0 0 1914
            分享
      • 51testing软件测试圈微信