对于网络爬虫来讲,其本质就是发送http请求,而后提取网页的内容信息进行入库分析等操做,因此对于任何语言均可以构建爬虫应用。我曾经就用过C#、C++、Java、Swift、Golang、Python这些语言来编写爬虫应用。css
总结来讲,这里仍是最推荐python,其优势就是学习简单,而且库十分全面,编写起代码来十分轻巧,另外python拥有丰富的机器学习库、数据处理库,如scikit-learn、numpy、pandas等等,能够用来处理咱们爬取的数据。html
本系列文章假设读者已经掌握了python语言的最基本语法,并有必定的编程基础。python
做为一门脚本语言,python代码不须要编译、连接等步骤,只须要使用python的解释器解释执行就行了,因此使用一个记事本就能够完成python的编码工做。不过为了更加高效的编写代码,程序员都会选择一款代码编辑器。程序员
若是对于python很熟悉,不须要代码拼写提示等功能,其实使用常见的代码编辑器如Atom、Sublime Text 便可(固然若是配置插件,这些编辑器也能够有强大的代码提示功能,不过新手配置起来可能会遇到困难)。chrome
若是须要代码提示,我感受用的最舒服的仍是JetBrains系列的Pycharm更好用一些。我自己也主要在用Pycharm。编程
浏览器除了浏览网页之外,对爬虫开发者来讲还能够对网页的Html元素、发送的HTTP请求进行分析。市面上基本上全部的浏览器都支持这两种功能,可是广泛来讲用的最多的仍是Chrome浏览器。浏览器
下面,咱们首先经过Chrome浏览器下载一个weibo上的小视频,来学习如何用Chrome浏览器抓取网络请求。网络
视频的连接:weibo.com/tv/v/FaOp9o…机器学习
打开Chrome浏览器后,咱们能够首先打开一共空白页面,而后右键,选择检查。编辑器
点击检查后,能够看到弹出一个Dock窗口,为了方便查看页面内容,我习惯把这个Dock窗口放在右边。
在这个Dock窗口中,有不少个选项卡,在本系列教程中,主要使用到Elements和NetWork这两个,一个负责审查Html元素,一个负责记录网络请求。目前须要使用网络抓取功能,因此先跳到Network这个选项卡中。
下面,在浏览器中输入视频的连接并回车,就能够看到网页加载出来了,其中的网络请求也记录在了右边。
能够看到这些网络请求有html、css、js、图片等等,点击一个条目后均可以看到请求的详情,在这里面其中有一个请求大小很大,而且在一直增加,能够想象这就是咱们正在观看的视频文件。
咱们点击这个请求能够看到请求的真实连接地址,这个地址中还带了个mp4,显然就是咱们正在观看的视频文件。
咱们把连接复制下来,在一个新的Tab中输入连接后回车,能够看到已经把视频下载到了本地。
用本地的影音播放器打开,和线上的如出一辙。
学习了上面的小技巧,若是碰到你想下载的音乐、想下载的视频,经过这种方法就能够下载下来(固然优酷、爱奇艺这样的专门作视频的网站已经规避了这种方法)。
下面,将正式开始学习网络爬虫,本章将以nladuo.cn/scce_site/为例, 爬取它的通知公告的文本信息。
网页主要由HTML、CSS、JavaScript代码以及图片等资源组成,其中HTML控制页面的结构,CSS控制页面的样式,JavaScript控制页面的逻辑。对于目前大部分的网站,咱们要爬取的文本信息通常状况下都保存在HTML中。(也有些网站使用JavaScript来控制页面的结构和信息,HTML中不存在须要爬取的信息,咱们将在反反爬虫篇再详细介绍这种状况。)
在python中,咱们能够经过requests库来下载一个网页的html。好比说上面的这个连接,咱们能够经过如下一行代码把网页信息下载下来,而后经过print打印它。
import requests
resp = requests.get("http://nladuo.cn/scce_site/")
print resp.content
复制代码
在运行代码前,请先使用pip安装requests库,使用如下命令便可完成对库的安装:
pip install requests
复制代码
运行代码后,能够看到显示出一堆html的标签。
在浏览器中,也是先下载这样的html页面,而后根据html代码的结构展现到显示屏中的。
下面,咱们来看看HTML如何对应到网页的结构中的,咱们先打开这个网址而后使用chrome浏览器查看一下这个网页的结构,像上面的抓取网络请求同样,咱们按下右键而后选择检查,并在右边弹出的选项卡中选择Elements项。
在Elements的左侧有个箭头,点击这个箭头后,箭头变为选中状态。箭头处于选中状态时,用鼠标滑动到左侧的网页中,能够看到右侧对应的html信息。
在上图中,能够看到新闻信息处在class为every_list的div标签中。展开div的class为every_list标签后,能够看到在class为list_title标签下面的a标签中,存放着新闻的连接(a.href),新闻的标题(a中间的文本);在class为list_time的标签中,存放了新闻发布的日期。
那么,咱们如何从HTML中提取这些文本呢?这里可使用HTML解析库解析HTML的内容,常见的有BeautifulSoup,HtmlParser、PyQuery等等。
这里,咱们选用BeautifulSoup,仍是先用pip安装一下依赖。
pip install bs4
复制代码
在使用requests下载html后,咱们把html传给一个BeautifulSoup对象后,便可对html进行解析,使用find查找指定元素。
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
resp = requests.get("http://nladuo.cn/scce_site/")
# print(resp.content)
soup = BeautifulSoup(resp.content)
items = soup.find_all("div", {"class": "every_list"})
for item in items:
title_div = item.find("div", {"class": "list_title"})
title = title_div.a.get_text()
url = title_div.a["href"]
time = item.find("div", {"class": "list_time"}).get_text()
print(time, title, url)
复制代码
在上面代码中,使用find_all方法首先找到全部的class为every_list的div标签,而后对div进行遍历,逐个打印每一个标签下面的list_title和list_time。(更详细的API,读者能够查阅BeautifulSoup的文档。)
运行上述代码后,成功打印出了新闻的基本信息。
至此,咱们的第一个爬虫也就完成了。