那些年,我爬过的北科(一)——爬虫基础之环境搭建与入门

环境搭建

关于语言

对于网络爬虫来讲,其本质就是发送http请求,而后提取网页的内容信息进行入库分析等操做,因此对于任何语言均可以构建爬虫应用。我曾经就用过C#、C++、Java、Swift、Golang、Python这些语言来编写爬虫应用。css

总结来讲,这里仍是最推荐python,其优势就是学习简单,而且库十分全面,编写起代码来十分轻巧,另外python拥有丰富的机器学习库、数据处理库,如scikit-learn、numpy、pandas等等,能够用来处理咱们爬取的数据。html

本系列文章假设读者已经掌握了python语言的最基本语法,并有必定的编程基础。python

关于代码编辑器

做为一门脚本语言,python代码不须要编译、连接等步骤,只须要使用python的解释器解释执行就行了,因此使用一个记事本就能够完成python的编码工做。不过为了更加高效的编写代码,程序员都会选择一款代码编辑器。程序员

若是对于python很熟悉,不须要代码拼写提示等功能,其实使用常见的代码编辑器如AtomSublime Text 便可(固然若是配置插件,这些编辑器也能够有强大的代码提示功能,不过新手配置起来可能会遇到困难)。chrome

若是须要代码提示,我感受用的最舒服的仍是JetBrains系列的Pycharm更好用一些。我自己也主要在用Pycharm。编程

关于浏览器

浏览器除了浏览网页之外,对爬虫开发者来讲还能够对网页的Html元素、发送的HTTP请求进行分析。市面上基本上全部的浏览器都支持这两种功能,可是广泛来讲用的最多的仍是Chrome浏览器。浏览器

下面,咱们首先经过Chrome浏览器下载一个weibo上的小视频,来学习如何用Chrome浏览器抓取网络请求。网络

用Chrome抓取网络请求

视频的连接:weibo.com/tv/v/FaOp9o…机器学习

打开Chrome浏览器后,咱们能够首先打开一共空白页面,而后右键,选择检查。编辑器

点击检查后,能够看到弹出一个Dock窗口,为了方便查看页面内容,我习惯把这个Dock窗口放在右边。

在这个Dock窗口中,有不少个选项卡,在本系列教程中,主要使用到Elements和NetWork这两个,一个负责审查Html元素,一个负责记录网络请求。目前须要使用网络抓取功能,因此先跳到Network这个选项卡中。

下面,在浏览器中输入视频的连接并回车,就能够看到网页加载出来了,其中的网络请求也记录在了右边。

能够看到这些网络请求有html、css、js、图片等等,点击一个条目后均可以看到请求的详情,在这里面其中有一个请求大小很大,而且在一直增加,能够想象这就是咱们正在观看的视频文件。

咱们点击这个请求能够看到请求的真实连接地址,这个地址中还带了个mp4,显然就是咱们正在观看的视频文件。

咱们把连接复制下来,在一个新的Tab中输入连接后回车,能够看到已经把视频下载到了本地。

用本地的影音播放器打开,和线上的如出一辙。

爬虫入门

学习了上面的小技巧,若是碰到你想下载的音乐、想下载的视频,经过这种方法就能够下载下来(固然优酷、爱奇艺这样的专门作视频的网站已经规避了这种方法)。

下面,将正式开始学习网络爬虫,本章将以nladuo.cn/scce_site/为例, 爬取它的通知公告的文本信息。

使用requests下载网页

网页主要由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的标签中,存放了新闻发布的日期。

使用BeautifulSoup解析Html

那么,咱们如何从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的文档。)

运行上述代码后,成功打印出了新闻的基本信息。

至此,咱们的第一个爬虫也就完成了。

相关文章
相关标签/搜索