# 最简单的web爬虫:获取所有课程信息




### 获取所有课程信息

我们现在来实现第一个超级简单的网络爬虫 用来抓取[重定向科技目前开设的所有测试课程](http://www.itest.info/courses)，并打印出来，步骤大概是这样子

* 先访问[所有课程页面](http://www.itest.info/courses)，把html代码拿到，实际上就是拿到一个很长的文本，文本内容就是网页的html代码
* 分析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元素](http://www.w3school.com.cn/html/html_elements.asp)
* [html属性](http://www.w3school.com.cn/html/html_attributes.asp)

Beautiful Soup库可以帮我们解析html代码，所谓的解析，无非是做下面的一些事情

* 从html文档中找到一些元素
* 获取某个元素或者一些元素的属性
* 获取某个元素或者一些元素的文本

在这个例子里，我们就是要找到所有```h4```元素，并获取所有```h4```元素的文本。

### 代码

新建名为```get_courses.py```的文件，输入下面的内容

```python
import requests
from bs4 import BeautifulSoup

url = 'http://www.itest.info/courses' # 定义被抓取页面的url
# 获取被抓取页面的html代码，并使用html.parser来实例化BeautifulSoup，属于固定套路
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
# 遍历页面上所有的h4
for course in soup.find_all('h4'):
    # 打印出h4的text属性
    print(course.text)
```

### 运行

在命令行中输入

```
python get_courses.py
```

### 预期结果

如果一切正常，那么应该可以看到下面的结果

```
性能测试从入门到精通班
接口自动化测试开发--Python班
Selenium自动化测试--Java班
Selenium自动化测试--Python班
```




原始封面

![课程图片](https://images.unsplash.com/photo-1508923567004-3a6b8004f3d7?w=300)


