![](http://mmbiz.qpic.cn/mmbiz_gif/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22bGrvRHgjl6cLXI65qSaiaTHI2IVzrLpwOUyNoqvtK39upDic5jVxED7g/0?wx_fmt=gif)
本章主要教一下大家如何使用审查元素找到我们需要的数据。这只是一个初步的对于HTML解析的方法,更多奇怪的问题,我们会通过实例一个一个深入探讨。
今天我们的示例网页是:巨潮资讯网,我们的目标是获取所有的股票代码和对应的公司名称。
![1486971171549071121.jpg](http://mmbiz.qpic.cn/mmbiz_jpg/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22DlOxnePibXNutpdEDyU7fzNWXTSGPt5rFIHmBjcfcv6Qzo7uYOsticpg/0?wx_fmt=jpeg)
HTML是一种标记语言。作为“标记语言”,需要有标记符号去标记。我们简单介绍一下一些标记。
为了和爬虫更好地结合一下,我们教一下大家使用审查元素。我们打开示例网页,然后点击右键,选择“审查元素”或者“检查元素”,然后把标签都收起来,收到这样:
![1486971209562061501.jpg](http://mmbiz.qpic.cn/mmbiz_jpg/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22GpPrEc8aQceaG8FXllEygL3p6Y9eV4b6uC3SBnQZA9FSM01BibgyHWQ/0?wx_fmt=jpeg)
首先我们看到最基本的几个标签:
![1486971427599046713.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22sdgPZM8iawNnr84DZJQibSoMakPmfVE4ibMZpyGX4tQXogEQOFMHTc2hw/0?wx_fmt=png)
"html"定义了这个文件是个HTML,"head"定义了标题,就是这个:
![1486971443630001222.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22pMEvvcUsreETr8sCwLhqGk0Sdhze8gX7sDTX6Ayvsc8PAe0ibVE3vicA/0?wx_fmt=png)
"body"里面的就是网页里面的正文。后面一个斜杠加一个同样名字的标签代表这部分结束。
好的,我们继续往下。对着某一个我们需要的数据,比如
![1486971443676079602.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22osAeM4gyME0EEfIYez7XbyRibTj33Q4rYJKZoP7Q5Ft0libtjzYuicXLA/0?wx_fmt=png)
点击“审查元素”,我们会看到:
![1486971555782051846.jpg](http://mmbiz.qpic.cn/mmbiz_jpg/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22fDT8pK8JlAXMWKYgrn1PMt9leGvSoofsTzdKtqEZ8oOHCImwtqib1Jg/0?wx_fmt=jpeg)
开发者工具很好地显示了HTML的层层逻辑。我们在这里列举一下我们经常见到的一些标签。(关于标签详细含义的介绍,请戳本节结束的参考资料。)
![1486971573155002510.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22fwAndxM8DsX6WYevuTbib3tdUx8z37jHz0HsstXwMKiasDARiay4ZR7iaw/0?wx_fmt=png)
我们再观察一下我们需要的数据的那段HTML:
![1486971573203003289.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22BOX1a7cibERiapia2JUJkFvyJrpevSyIvx8sibz2jibNZfM6ng7icPOz9YBQ/0?wx_fmt=png)
我们看到,在标签的里面还有一些XX="XX"的东西,这个是标签的属性。(具体的含义我们也不多介绍,如果想深入了解,请戳本节结束的参考资料。)
一些基本的概念就讲到这里。也许你会以为这还不够。这当然不够,但是对于bs4的一些基本用法已经足够了。
参考资料:W3School是一套非常好的Web开发教程。关于HTML,请戳:HTML 简介
这次我们使用IDLE来编写程序。
在使用之前,你需要下载一下这个第三方库。
我们打开一个新文件:
![1486971598451017467.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22wu7VC7azicuVORkD43No5Xm2vUor6jskt7ia3xXwoL6p7dBA1qftePPw/0?wx_fmt=png)
然后按照第二讲的请求方法,先把HTML请求下来:
![1486971598488010815.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22nG9qGh6fnCLllXfCl9MoxVYuQzAsyuia2M0Bc25NbSyfvxzqb6BFBFg/0?wx_fmt=png)
接着,我们在审查元素里面去找我们需要的数据(见本篇第一部分)。我们接下来要做的事情是,用bs4这个强大的工具,通过前面提到的标签和标签的属性定位到某个标签。
首先我们要导入模块并创建一个BeautifulSoup对象:
![1486971626017089661.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw220tSp8bvR7h3NEvloUq5a1pqjZrHGTz1TCiac9vhibb1XpG99efnOWIvg/0?wx_fmt=png)
后面的这个参数是解析器。关于解析器的选择,请参考官方文档:Beautiful Soup 4.2.0 文档。我们这里使用Python自带的解析器,这样可以避免Windows下坑爹的lxml安装问题。
![1486971626070019506.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22FiblMbMicM2Dom68J71jic7xOCztbuicrSAC6STa4q9cZ9icnBfy2Ribwic0A/0?wx_fmt=png)
事实上,找合适的标签这个技能有很多简便的实现方式和技巧。但是对于新手来说,最简单的方法反而是一个一个标签定位下去。这小段代码就示例了这个过程。从代码我们可以看到,直接索引和用find方法都是可以的。find方法里面也可以加上attrs参数,然后用字典传入我们想找的标签属性。
一个小Tip:HTML的标签习惯用“-”连接,比如“list-ct”,而不是“_”
继续往下解析:
![1486971827136018417.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22NicQ80SNvsIFLd9iblbBaV7SW9Ekict7Xktm8CHAEtDKpOeV04y18PYyQ/0?wx_fmt=png)
如果我们想取出某一类标签下所有的HTML,那就用find_all方法就可以。如果我们想要某个标签属性里面的值,那么就用字典的语法索引就可以。如果我们想要标签里面的文字,就使用get_text方法。
这里我们仍然只是把结果print出来,在下一讲再说储存:
![1486971670296079663.png](http://mmbiz.qpic.cn/mmbiz_png/yAyQKzCbAHZDND3Y5jee5ibETxElFXw22NicQ80SNvsIFLd9iblbBaV7SW9Ekict7Xktm8CHAEtDKpOeV04y18PYyQ/0?wx_fmt=png)
我们把上面的函数拼到一起: