网络爬虫或python爬虫大家应该都听过,可能大家认为这是一门比较高端的知识点,其实在了解相关的一些基础知识后便能够很快的上手入门网络爬虫。
什么是网络数据采集
理论上,网络数据采集是一种通过多种手段收集网络数据的方式,不光是通过与API交互(或者直接与浏览器交互的方式),最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息
这是来自《Python3网络爬虫数据采集》一书中的解释,怎么样,是不是对其中的一些词语不是很清楚。现在我们来一句一句的看。首先不光是通过与API交互,在现在常见的软件架构下,前端的数据(即网页)都是通过请求指定的API接口来找到对应的数据,API接口可以理解为一个地址,根据这个地址你可以找到自己所需要的资源(即数据)。再然后是HTML表单,你可以理解为是一种文件格式,和excel或是Word类似,就是一种文件,我们浏览的各类网页都是HTML文件。总而言之,网络数据数据采集,就是通过获取网页和网页上的相关信息,再通过数据逻辑处理得到最终想要的数据。
为什么要做网络数据采集
可能大家会有疑问,那刚才说的数据可以通过API请求,为什么还要写自动化爬虫程序呢。这里主要有两个原因,第一,我们需要的数据有可能没有提供对应的API接口,这个很好理解,我们的数据可能是根据网页上的数据计算得来的,或者是多个网页组合的结果。第二,大多数时候我们爬取的不是自己的项目甚至不是公司内部的项目,别人没有义务给我们提供我们需要的数据对应的API接口,当然现在很多第三方软件都提供了对应的接口平台,但是很多接口也都有单日的访问次数限制。所以做网络数据采集可以将数据的主动权掌握在自己的手里
写网络爬虫的基础步骤
- 通过网站域名获取HTML数据
- 根据目标信息解析数据
- 存储目标信息
- 如果有必要,移动到另一个网页重复这个过程
什么是网站域名呢?https://www.csdn.net/就是CSDN的网站域名。
常用的python爬虫相关的库
- urllib
- beautifulSoup
urllib库是python内置的,无需安装,需要的时候直接应用即可。beautifulSoup通过以下命令安装 pip install beautifulSoup4,现在我们来看一下一个简单的爬虫代码,然后再对照代码来补充一些代码相关的基础知识
def urllibTest():
html = urlopen("https://zhuanlan.zhihu.com4")
print(html.read())
'''
beautifulSoup库可以将读取来的html文件结构化
'''
def beautifulSoupTest():
html = urlopen("https://zhuanlan.zhihu.com")
bsObj = BeautifulSoup(html.read())
print(bsObj.h1)
if __name__ == "__main__":
print("this is main")
# urllibTest()
beautifulSoupTest()
这一段代码一共21行,通过这21行代码我们顺便了解一下代码的一些基础知识
首先这是一个.py文件,什么叫做.py文件呢?在平时工作中,如果是一个.txt文件,那你一定知道是一个文本文件,如果是一个.docx文件,那你一定知道是一个Word文件。同样的.py文件,就是一个python文件。
然后你复制了这一段代码,并已.py为后缀新建了一个文件,接下来却不知道该怎么做了。如果你是一个编程小白这是正常的,如果你是一个有其他编程语言经验的程序员那你一定知道类似与java和js以及其他语言,python也需要一个运行环境。
怎么去安装python环境呢?
- 官网下载对应的python版本
- 双击安装
官网地址为:https://www.python.org/
版本选择考虑两个事情,电脑系统是什么?笔者是win64。python版本选多少,笔者当前使用的是python3.7。做完这两个事情后,刚才你新建的day01.py文件就可以运行起来了。
那怎么运行呢?我们可以用CMD用python去执行该文件,但是这种方式不常用,这里我建议直接下载vs code,然后使用vs code 打开文件,带年纪右上角的点击按钮,那么代码就能运行起来了。
对于上面python安装及运行步骤,如果有不清楚的地方,可以直接在评论区问出来,或者关注我的公众号PythonCookbook学习笔记,看到问题后我会尽快回复,公众号也会有python其他相关的知识总结!
好了,让我们继续回归到代码本身。第一行和第二行我们将英语翻译过来,基本上就是这两行代码的意思了,其实python和我们的思维逻辑很像,大多数代码都是这样,读懂就知道代码是在做什么了。这两句都是从某一个东西里面引入什么东西。第一句是在urllib库下的request模块下引入urlopen这个方法,什么是库呢?库就是别人写好的一些功能模块,我们只要引入就可以使用别人已经封装好的功能了。这样子第一句第二句我们引入了两个库中两个我们需要的方法。第五行,我们定义了一个方法,什么是方法?方法就是将完整的一个功能逻辑放在一起的代码块,通过方法名就可以调用整个方法中所有的代码块了。在urllibTest方法中,我们使用urlopen方法去请求了知乎的首页html代码。第六行我们将这个html文件整个打印出来的,大家可以看一下自己电脑上打印的是什么。是一连串很长的文字,这些文字在编程上叫字符串,而这些字符串就是构成知乎首页所有的HTML元素了。
在第二个方法中我们使用了BeautifulSoup方法,同样的这个也是别人写好的方法,这个方法的作用是将刚才的字符串结构化,按html的格式结构化,这样我们就能结构化的去拆分知乎首页的各个元素,从而更方便我们进行数据爬取(爬取我们关心的数据)
在十八行我们定义了一个main方法,在所有编程语言里面都有main方法,他是程序的起点,也就是说我们的这个程序启动,答应的第一句话是this is main,然后再调用下面的方法。
今天的内容先到这里,这边文章读完后你需要在电脑上安装好python环境并运行对应的代码,查看打印结果,有问题可以在评论区或者公众号留言,看到后我会尽快回复消息的,下篇文章见!