网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。
本节编写一个最简单的爬虫程序,作为学习 Python 爬虫系列前的开胃小菜。
在使用 Python 编写爬虫程序之前,您需要提前做一些准备工作,这样在后续学习过程中才会得心应手。
有关爬虫的知识
文章目录
Python语言
Python 爬虫作为 Python 编程的进阶知识,要求学习者具备较好的 Python 编程基础。没基础的小伙伴,可以看看本公众号之前发的几篇入门文章。
同时,了解 Python 语言的多进程与多线程,并熟悉正则表达式语法,也有助于您编写爬虫程序。
注意:关于正则表达式,Python 提供了专门的 re 模块。
Web前端
了解 Web 前端的基本知识,比如 HTML、CSS、JavaScript,这能够帮助你分析网页结构,提炼出有效信息。
HTTP协议
掌握 OSI 七层网络模型,了解 TCP/IP 协议、HTTP 协议,这些知识将帮助您了解网络请求(GET 请求、POST 请求)和网络传输的基本原理。同时,也有助您了解爬虫程序的编写逻辑。

环境准备并接入代理IP
编写 Python 爬虫程序前,需要准备相应的开发环境,这非常的简单。首先您需要在您的电脑上安装 Python,然后下载安装 Pycharm IDE(集成开发环境)工具。
本教程使用 Windows 10 系统进行 Python 爬虫的讲解,当然您也可以使用其他系统,比如 Linux 或者 Mac。
下面使用 Python 内置的 urllib 库获取网页的 html 信息。注意,urllib 库属于 Python 的标准库模块,无须单独安装,它是 Python 爬虫的常用模块。
使用代理IP处理Python请求
在开始之前,您需要满足以下先决条件:
- Python 3。您需要安装最新的 Python 版本。
- 要求。您可以通过运行来添加它
pip install requests
。 - 代码编辑器。使用您选择的任何编辑器。
- 优质动态IP池
如何使用请求设置代理:基本配置
步骤 1.要使用 Python 请求设置代理,请运行初始化命令。
import requests
步骤 2.然后,添加包含代理信息的代理参数。
HTTP代理:
proxies = {
'http': 'http://host:PORT',
'https': 'http://host:PORT',
}
SOCKS5代理:
proxies = {
'http': 'socks5://host:PORT',
'https': 'socks5://host:PORT',
}
步骤 3.现在,让我们创建一个响应变量并传递 proxies 参数。
response = requests.get('URL', proxies = proxies)
注意:您可以使用任何请求方法,例如 get ()、post() 或 put()。
如何验证代理
要验证您的代理,请传递用户名和密码以及代理配置。
proxies = {
'http': 'http://user:password@host:PORT',
'https': 'http://user:password@host:PORT',
}
response = requests.get('URL', proxies = proxies)
如何设置代理会话
如果您想使用相同的代理配置发出多个请求,则需要创建一个会话并添加代理。您可以通过传递带有代理配置的会话对象并通过它发送请求来做到这一点。
session = requests.Session()
session.proxies = proxies
response = session.get('URL')
获取网页html信息
获取响应对象
向百度(http://www.baidu.com/)发起请求,获取百度首页的 HTML 信息,代码如下:
#导包,发起请求使用urllib库的request请求模块
import urllib.request
# urlopen()向URL发请求,返回响应对象,注意url必须完整
response=urllib.request.urlopen('http://www.baidu.com/')
print(response)
上述代码会返回百度首页的响应对象, 其中 urlopen() 表示打开一个网页地址。注意:请求的 url 必须带有 http 或者 https 传输协议。
输出结果,如下所示:
<http.client.HTTPResponse object at 0x032F0F90>
上述代码也有另外一种导包方式,也就是使用 from,代码如下所示:
#发起请求使用urllib库的request请求模块
from urllib import request
response=request.urlopen('http://www.baidu.com/')
print(response)
输出HTML信息
在上述代码的基础上继续编写如下代码:
import urllib.request
# urlopen()向URL发请求,返回响应对象
response=urllib.request.urlopen('http://www.baidu.com/')
#提取响应内容
html = response.read().decode('utf-8')
#打印响应内容
print(html)
输出结果如下,由于篇幅过长,此处只做了简单显示:
<!DOCTYPE html><!--STATUS OK--> <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><meta name="description" content="全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到...">...</html>
通过调用 response 响应对象的 read() 方法提取 HTML 信息,该方法返回的结果是字节串类型(bytes),因此需要使用 decode() 转换为字符串。程序完整的代码程序如下:
import urllib.request
# urlopen()向URL发请求,返回响应对象
response=urllib.request.urlopen('http://www.baidu.com/')
# 提取响应内容
html = response.read().decode('utf-8')
# 打印响应内容
print(html)
通过上述代码获取了百度首页的 html 信息,这是最简单、最初级的爬虫程序。后续我们还学习如何分析网页结构、解析网页数据,以及存储数据等。
常用方法
在本节您认识了第一个爬虫库 urllib,下面关于 urllib 做简单总结。
urlopen()
表示向网站发起请求并获取响应对象,如下所示:
urllib.request.urlopen(url,timeout)
urlopen() 有两个参数,说明如下:
- • url:表示要爬取数据的 url 地址。
- • timeout:设置等待超时时间,指定时间内未得到响应则抛出超时异常。
Request()
该方法用于创建请求对象、包装请求头,比如重构 User-Agent(即用户代理,指用户使用的浏览器)使程序更像人类的请求,而非机器。重构 User-Agent 是爬虫和反爬虫斗争的第一步。在下一节会做详细介绍。
urllib.request.Request(url,headers)
参数说明如下:
- • url:请求的URL地址。
- • headers:重构请求头。
html响应对象方法
bytes = response.read() # read()返回结果为 bytes 数据类型
string = response.read().decode() # decode()将字节串转换为 string 类型
url = response.geturl() # 返回响应对象的URL地址
code = response.getcode() # 返回请求时的HTTP响应码
编码解码操作
#字符串转换为字节码
string.encode("utf-8")
#字节码转换为字符串
bytes.decode("utf-8")
本文仅对 Python 爬虫及实现过程做了简明扼要地介绍,仅能使初学者对 python 爬虫有一个浅显的认识,并不能让你完全掌握 Python 爬虫。