Python 爬虫入门基础教程:流程、模块与框架详解
Python 爬虫入门基础教程涵盖爬虫定义、HTTP 协议原理、Requests 库使用、解析技术(XPath、BeautifulSoup)、Scrapy 框架架构及分布式方案。内容包含 GET/POST 请求示例、代理设置、多线程并发处理及 Scrapy 组件详解,适合初学者快速掌握网络数据采集的核心流程与工具链。

Python 爬虫入门基础教程涵盖爬虫定义、HTTP 协议原理、Requests 库使用、解析技术(XPath、BeautifulSoup)、Scrapy 框架架构及分布式方案。内容包含 GET/POST 请求示例、代理设置、多线程并发处理及 Scrapy 组件详解,适合初学者快速掌握网络数据采集的核心流程与工具链。

爬虫(Spider),又称网络爬虫,是指向网站发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说,就是通过程序模拟浏览器请求站点的行为,把站点返回的 HTML 代码、JSON 数据、二进制数据(图片、视频)爬到本地,进而提取自己需要的数据,存放起来使用。
用户获取网络数据的方式主要有两种:
爬虫要做的就是方式 2。
流程步骤:
HTTP 协议是客户端和服务器之间通信的基础。
Request(请求):用户将自己的信息通过浏览器(socket client)发送给服务器(socket server)。 Response(响应):服务器接收请求,分析用户发来的请求信息,然后返回数据(返回的数据中可能包含其他链接,如:图片、JS、CSS 等)。 PS:浏览器在接收 Response 后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求然后接收 Response 后,是要提取其中的有用数据。
(1) 请求方式 常见的请求方式:GET / POST。
(2) 请求的 URL URL(全球统一资源定位符),用来定义互联网上一个唯一的资源。例如:一张图片、一个文件、一段视频都可以用 URL 唯一确定。
(3) 请求头
一般做爬虫都会加上请求头,需要注意的参数包括 User-Agent(访问的浏览器,要加上否则会被当成爬虫程序)和 Cookie(请求头注意携带)。
(4) 请求体
(1) 响应状态码
(2) Response Header 响应头需要注意的参数:Set-Cookie:BDSVRTM=0; path=/:可能有多个,是来告诉浏览器,把 Cookie 保存下来。
(3) Preview 就是网页源代码,包括 JSON 数据、HTML 网页、图片、二进制数据等。
Requests 是 Python 实现的简单易用的 HTTP 库,是由 urllib 的升级而来。 开源地址:https://github.com/kennethreitz/requests 中文 API:http://docs.python-requests.org/zh_CN/latest/index.html
在 Python 中使用内置的 re 模块来使用正则表达式。 缺点:处理数据不稳定、工作量大。
XPath(XML Path Language)是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。 在 Python 中主要使用 lxml 库来进行 XPath 获取(在框架中不使用 lxml,框架内直接使用 XPath 即可)。 lxml 是一个 HTML/XML 的解析器,主要的功能是如何解析和提取 HTML/XML 数据。 lxml 和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的 XPath 语法,来快速的定位特定元素以及节点信息。
和 lxml 一样,Beautiful Soup 也是一个 HTML/XML 的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。 使用 BeautifulSoup 需要导入 bs4 库。 缺点:相对正则和 XPath 处理速度慢。 优点:使用简单。
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。 在 Python 中主要使用 json 模块来处理 JSON 数据。
使用 threading 模块创建线程,直接从 threading.Thread 继承,然后重写__init__方法和 run 方法。
import requests
url = 'https://example.com'
response = requests.get(url)
print(response.text)
import requests
url = 'https://example.com/login'
data = {'username': 'user', 'password': 'pass'}
response = requests.post(url, data=data)
print(response.text)
import requests
proxies = {
'http': 'http://127.0.0.1:8080',
'https': 'http://127.0.0.1:8080'
}
response = requests.get('https://example.com', proxies=proxies)
通常需要通过开发者工具分析接口,直接请求 JSON 数据。
import requests
import json
url = 'https://api.example.com/data'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
data = response.json()
print(json.dumps(data, indent=4, ensure_ascii=False))
import threading
import requests
def fetch(url):
response = requests.get(url)
print(f'{url}: {response.status_code}')
urls = ['https://example.com']
threads = []
for url in urls:
t = threading.Thread(target=fetch, args=(url,))
threads.append(t)
t.start()
for t in threads:
t.join()
Scrapy 是用纯 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架,用途非常广泛。 Scrapy 使用了 Twisted 异步网络框架来处理网络通讯,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活的完成各种需求。
(此处省略架构图,参考官方文档)
scrapy startproject mySpiderscrapy genspider gushi365 "gushi365.com"Fiddler 是一款抓包工具,主要用于手机抓包及流量分析。
XPath Helper 插件是一款免费的 Chrome 爬虫网页解析工具。可以帮助用户解决在获取 XPath 路径时无法正常定位等问题。
Scrapy-redis 是为了更方便地实现 Scrapy 分布式爬取,而提供了一些以 Redis 为基础的组件(pip install scrapy-redis)。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online