Python 爬虫基础套路

131 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

有了一定Python基础的同学,都很愿意着手练习,但是这个时候有一些好的练习案例是很重要的,如果案例不恰当,很容易让学习变得乏味,直到放弃。

在初学Python阶段的练习过程当中,有几个好的方向:

1、自动化办公开发,结合xlrd,xlwt等三方模块进行excel等办公软件操作,在实际工作当中使用。

2、图形化开发,比如文件管理,日程管理小模块。

3、常用软件接口开发,比如,微信机器人,qq聊天机器人,钉钉机器人。

4、爬虫,获取网站资源,比如下载电子书,视频。

.........

今天我们就聊一下爬虫的基本套路

爬虫介绍

爬虫(spider),又叫做网络蜘蛛,其实就是代替浏览器向服务器发起请求,获取资源的程序,这里可能有小伙伴会问,为啥要用爬虫呢?浏览器他不香吗?香,浏览器在个人访问网站的过程当中为用户提供了极大的方便,但是对于批量获取数据(下载10000个avi)其他程序操作浏览器来说,额,就没有那么方便了(得单身多久的手术,才可以1分钟下载1000个avi)。

所以从开始学习爬虫就要记住下面的概念:

1、爬虫是用来请求数据的,模拟浏览器请求服务器的程序。

2、爬虫用来批量或者自动化操作,如果只是简单的访问百度,那么就不必用爬虫了。

需要掌握的概念

爬虫是模拟浏览器的程序,那么就绕不开一个重要的概念,HTTP协议,我们简单的来了解一下HTTP协议,首先强调,如果想要学好爬虫,HTTP协议建议认真研究,但是至少,对我们今天聊的是至少要了解下面的概念:

1、超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

2、HTTP协议有两个核心的点,request请求,response响应,客户端(爬虫,浏览器)向服务器发起请求,服务器向请求方做出响应。

3、发起请求需要两个基本的要素:

1)地址:

地址代表请求资源的位置,我们成为url(统一资源定位符),格式如下:

协议头://域名:端口/资源地址/资源名称,比如:

http://www.baidu.com/img/1.gif

2)请求头部,里面有很多属性,但都是为了表明请求身份的内容(好比去和老师请假,是不是需要先表明身份,一个道理)比如常见的声明请求终端版本的:

User-agent: ozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Mobile Safari/537.36

常用的模块

Python十分擅长爬虫开发,因为提供了丰富的开发库,常见的爬虫开发库有:

1、urllib,这个模块一般来说是小伙伴们入门必选的,内置模块,不用安装,直接使用,并且功能全面,最简单的爬虫,两行完成。

2、requests,这是Python很经典的爬虫模块,从初学可以一直用到工作,从最基本的网页请求到模拟登录都可以做,但是是三方模块,需要pip安装。

3、selenium,这个模块不但收到了爬虫爱好者的喜爱,也是自动化测试小伙伴的心头好,它可以让你用代码像描述一次操作,然后打开浏览器,然后输入内容,然后点击,当然,也有两个不太友好的地方:

1)安装确实比上面所说的框架要麻烦不说,而且还得安装浏览器驱动 。

2)需要对xpath和html结构有足够的了解,否则看到点不到的痛苦比不会更加难受。

4、scrapy框架,这是应该是目前爬虫使用最多的框架,从请求到数据导出有完整的规则,当然学习成本也高一些。

5、re正则,获取内容之后,通过描述数据类型和数量进行数据匹配的模块,难度很高,但是匹配精确度很高。

6、xpath模块,通过html结构进行匹配的模块,匹配难度低,但是要对html结构足够了解。

7、beautifulsoup模块,一个综合的匹配模块,可以使用正则或xpath匹配,使用灵活度极高。

当然,还有很多其他模块,欢迎留言讨论啊

爬虫基础套路

上述聊了聊基本的爬虫概念,那么下面介绍一个基本的爬取请求框架:

import requests
​
url = "http://www.baidu.com" #找到请求的地址headers = {
    "User-agent": "ozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Mobile Safari/537.36"
} #设置请求头reponse = requests.get(url,headers = headers) #携带地址和请求头去请求
​
print(response.content) #查看响应内容