Python作为一门高级编程语言,它的定位是优雅、明确和简单。我学用python差不多一年时间了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过论坛中自动登录自动发帖的脚本,写过自动收邮件的脚本,写过简单的验证码识别的脚本。



这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,故累积了不少爬虫抓站的经验,在此总结一下,那么以后做东西也就不用重复劳动了。

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

一、还原手工操作

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

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修改完之后看效果。



最后邀请想提升实力的测试人一起学习

如果你的也有很多问题想要解决,你的测试职业规划也需要一点光亮 ,你也想跟着大家一起分享探讨,我给你推荐一个 「Python自动化测试学习交流群」 你缺的知识这里有,你少的技能这里有,你要的大牛也在这里……

来吧!!一起进阶 自动化测试 !!