什么是网络爬虫
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
有没有想过这样一个问题:在google的搜索框内输入一个词语,和这个词语相关的内容怎么就显示出来了呢?
可以说,类似google、百度这样的搜索引擎也是网络爬虫。用户输入一个关键词,它按照一定的规则把这个关键字相关的内容给抓取出来展示。
那么问题来了,既然这些大佬们提供了网络爬虫级的服务,为什么我们还要自己动手做爬虫呢?
很简单,我们有自己的需求。比如一个企业对某些数据源很感兴趣,指望百度给他提供所有的数据是不可能的,它只能自己去挖掘。
有些人为了获取需要的股票信息,自学编程抓取数据分析,可见动力之大。当然,想要买房子的、找工作的,都可以自己动手抓取想要的数据。
准备工作
本文实现的网络爬虫使用python。没有使用python做过项目?没关系,理解本文基本不需要任何python相关的知识,只要稍有了解即可。
需要的库
类似于java的jar包,c语言的头文件,python具有更加强大的库。
urllib.request
这是python自带的库,作用是打开url(大部分HTTP协议)获取html的内容。BeautifulSoup
从HTML或XML文件中提取数据。它能够通过转换器实现惯用的文档导航,查找,修改文档的方式。
安装的方式如下(关于pip包管理工具的介绍,点击查看):
pip install beautifulsoup4
安装后,在python命令行下输入
from bs4 import BeautifulSoup
运行没有报错就是安装成功。
D:\Program Files\python>python
Python 3.7.0b4 (v3.7.0b4:eb96c37699, May 2 2018, 18:05:41) [MSC v.1913 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from bs4 import BeautifulSoup
>>>
写代码
万事俱备,开始写代码。
思路:先用urllib.request获取html内容,再用BeautifulSoup提取其中的数据即可。
#test_html.py
#在url库里,查找request模块,导入urlopen函数
from urllib.request import urlopen
html = urlopen('http://jr.jd.com/')
print(html.read())
html.close()
以上三行代码即实现了抓取html内容的目标!运行test_html.py即可打印出该url指向网页的全部HTML代码。
但这时有一个问题,没有人想要某个网站的全部HTML内容。所以,我们要对抓取到的数据进行分析和处理,只留下我们关心的即可。
比如我们关心京东金融的“理财”级别栏目,就要知道如何才能从一堆HTML中找到这个级别相关的元素。这就需要大概读懂网页上的html。
在chorme中打开网页,按F12进行调试模式,然后按ctrl+shift+c,点击想要查看的元素,即可定位html代码。
修改后的代码如下:
#test_html.py
#在url库里,查找request模块,导入urlopen函数
from urllib.request import urlopen
from bs4 import BeautifulSoup
#打开url,获取html内容
html = urlopen('http://jr.jd.com/')
bs_obj = BeautifulSoup(html.read(), 'html.parser')
text_list = bs_obj.find_all("a", "nav-item-primary")
for text in text_list:
print(text.get_text())
#打印html内容
#print(html.read())
#关闭文件
html.close()
运行程序,就得到了我们想要的数据。
D:\Program Files\python>python test_html.py
首页
理财
众筹
保险
白条
股票
东家财富
企业金融
金融云
城市计算
D:\Program Files\python>
总结
用python实现简单的网络爬虫并不需要太多的代码,但需要很多的思考和练习。
python的强大离不开无所不能的库,在python使用过程中,要多总结、多动手,尝试挑战使用更简的程序实现同样的功能。