Python培训
400-996-5531
爬虫实际上就是采集网络上数据的一段程序,如果把互联网比喻成一个蜘蛛网,那么蜘蛛就是在网上爬来爬去的蜘蛛,爬虫程序通过请求url地址,根据响应的内容进行解析采集数据, 比如:如果响应内容是html,分析dom结构,进行dom解析、或者正则匹配,如果响应内容是xml/json数据,就可以转数据对象,然后对数据进行解析。
资源视角
互联网上一切都是资源,比如视频资源,新闻资源等,爬虫实际上就是批量将别人的资源采集下来变成自己的资源的程序。
从其他网站爬取特定类型的商品信息,然后发布在自己的网上商城里
从其他网站爬取一些特定图片,展示在自己的网站里
搜索引擎爬取网站基本信息,收录在自己的搜索结果里
访问1个站点,获取该站点的html代码
解析html代码,把感兴趣的数据从html代码里分离出来
保存这些数据
假设我需要抓取重定向科技目前开设的所有测试课程,那么
先访问所有课程页面,把html代码拿到
解析html代码,从里面抠出来课程的名称和详情地址
保存课程的名称和地址
这样就可以实现一个最简单的网络爬虫了。
有时候自己去造一些测试数据是很麻烦的事情,这时候我们就可以使用爬虫去获取其他站点的类似数据,对数据进行加工后就可以当测试数据来使用了。
我们使用python来实现最简单的爬虫。
使用python的requests库来发起http请求并获取目标站点的html代码。
使用python的BeautifulSoup库来解析html,从html中提取感兴趣的内容。
大家可以在测试教程网requests教程中找到requests库的一些典型用法。
安装python3,可以参考这里
安装requests,可以参考这里
安装BeautifulSoup,可以参考这里
我的电脑上环境是这样
python: 3.5.2
requests: 2.13.0
beautifulsoup4: 4.6.0
不需要与我的版本保持完全一致,只需要大于等于我使用的版本就可以了
我们现在来实现第一个超级简单的网络爬虫 用来抓取重定向科技目前开设的所有测试课程,并打印出来,步骤大概是这样子
先访问所有课程页面,把html代码拿到,实际上就是拿到一个很长的文本,文本内容就是网页的html代码
分析html代码,找到我们需要获取信息的html特征
解析html代码,根据html特征,从里面抠出来课程的名称
打印出所有课程的名称
我们在编写爬虫的时候往往会花很多时间在分析html代码上,毕竟重要的信息都包含在html代码中,我们需要找到合适的特征,通过固定的套路去解析html,获取特定内容。
课程名称部分的html代码如下所示
<div class="col-md-3 col-sm-6"> <div class="servive-block-in servive-block-colored servive-block-grey"> <h4>性能测试从入门到精通班</h4><div><i class="icon-rocket"></i> </div> <p>2017年09月23日开课,为期3个月</p></div>
可以看到,课程名称的html标签是h4
,通过搜索整个页面,我们发现页面上只有4个h4,也就是说,只要获取到页面上所有的h4,我们就能把课程名称给解析出来。
分析html一般有下面一些套路
缩小范围: 只解析特定区域的html,比如只遍历<nav></nav>
标签中的子元素
组合属性: 有一些节点的属性是相同的,但我们经常只需要获取其中一些节点的内容,这时候可以通过组合该节点属性和其父节点属性的方式指定特定的节点
先遍历后过滤:还是上面一种情况,我们也可以先遍历所有的目标节点,再从目标节点中过滤出我们感兴趣的内容
解析html代码
大家可以先去了解一下html的基础知识,比较有用的是
html元素
html属性
Beautiful Soup库可以帮我们解析html代码,所谓的解析,无非是做下面的一些事情
从html文档中找到一些元素
获取某个元素或者一些元素的属性
获取某个元素或者一些元素的文本
在这个例子里,我们就是要找到所有h4
元素,并获取所有h4
元素的文本。
代码
新建名为get_courses.py
的文件,输入下面的内容
import requestsfrom bs4 import BeautifulSoupurl = '#/courses' # 定义被抓取页面的url# 获取被抓取页面的html代码,并使用html.parser来实例化BeautifulSoup,属于固定套路soup = BeautifulSoup(requests.get(url).text, 'html.parser')# 遍历页面上所有的h4for course in soup.find_all('h4'): # 打印出h4的text属性 print(course.text)
运行
在命令行中输入
python get_courses.py
预期结果
如果一切正常,那么应该可以看到下面的结果
性能测试从入门到精通班接口自动化测试开发--Python班Selenium自动化测试--Java班Selenium自动化测试--Python班
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved