从零开始写一只爬虫 · Hello World


发布于

|

分类

,

爬虫

我们学语言都是从Hello World开始的吧?(我不是!我学语言第一个程序是个VB写的俄罗斯方块而不是HelloWorld!)

那么我们来写一个Hello World吧

首先在目标网站上随便找到一家公司,获取到他的URL,比如陌陌。然后,让我们的Python模拟浏览器的行为,“打开”这个页面,获取到网页源代码,并把源代码输出到控制台上。

import requests

url = 'http://www.lagou.com/gongsi/129.html'
response = requests.get(url, timeout=5, allow_redirects=False)
print(response.text)

这段代码如果能成功运行,就标志着,你的网络是畅通的。

题外话:Linux里面有个命令叫做 curl ,最基础的功能就和上面的代码一模一样的。

curl http://www.lagou.com/gongsi/129.html

然后呢?

获取到HTML代码有什么用啊!我要的是里面的关键信息啊!下面就是从一大堆乱糟糟的HTML代码中把我们想要的信息抽取出来。

首先说,这些关键信息的出现位置几乎都是固定的。不信你在这个网站上多打开几个公司看看就知道了。然后,不仅出现位置比较固定,查看源代码我们也会发现,在“公司名称”和“公司所在地”这两个我们想要的信息前面,都有明显的标志:可能是id,可能是class,甚至是全局唯一的标签(比如 h1 )。

比如,公司名称,是这样出现的:

<h1 class="ellipsis">
    <a  href="http://www.immomo.com/" class="hovertips"  target="_blank" rel="nofollow" title="北京陌陌科技有限公司">
        陌陌
    </a>
</h1>

公司所在地是这样出现的:

<li class="location">
    <i></i>
    <span>北京</span>
</li>

找到了这些信息,怎么办呢?有两种办法。

第一种办法:正则表达式。

Ok我不会正则表达式……就不在这里献丑了……囧……更确切地说,我不会“提取”匹配到的东西。

第二种办法:根据DOM查找

我们知道,HTML是有层次结构的。如果想找到某个元素,需要从html标签开始向下找,在某个div的某个div的某个ul的某个li里面就是我们想要找的信息。如果用过JS的话肯定对这个门清。

对于“公司名称”,在写JS的时候可以这样找到:

$("h1>a[title]").prop("title")

对于“公司所在地”,在写JS的时候可以这样找到:

$(".location>span").first().text()

能实现这个“路径导航”的工具不少。Java下面甚至有工具能直接用$(CSS选择器)这样的方式进行导航,吓死宝宝了……当然,万能的Python也有很多库。下面是使用一个叫做BeautifulSoup的库的演示,官方文档见这里。吐槽:“这篇文档当然还有中文版”,呵呵呵?

import requests
from bs4 import BeautifulSoup

url = 'http://www.lagou.com/gongsi/129.html'
response = requests.get(url, timeout=5, allow_redirects=False)
data = BeautifulSoup(response.text)
print(data.h1.a.text.strip())
print(data.find('ul', 'info_list_with_icon').find(attrs={'class': 'location'}).span.text)

Ok,到这里,我们已经能将网页“点开”,并且能获取到其中的关键信息了。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注