【Python】-- 爬虫及Requests、BeautifulSoup基础

        Python作为一种简洁而强大的编程语言,凭借其丰富的库和框架,成为了数据抓取和处理的首选工具之一。Python爬虫技术,正是在这种背景下应运而生,它能够自动化地从互联网上获取大量数据,为企业和个人提供了巨大的便利。 本文旨在为Python爬虫技术提供一份详尽的入门指南,适合零基础的初学者,将向您介绍爬虫的基础知识和基本工作流程,并探讨如何使用Requests库发送请求,以及利用BeautifulSoup库解析HTML文档。

一、爬虫的基本知识

1. 什么是爬虫   

        爬虫,全称是网络爬虫(Web Crawler),也称为网络蜘蛛,是一种自动化程序,用于抓取网页上的信息。这些信息可以包括网页的内容、结构或其他相关资源。爬虫通过模拟用户访问网站的行为,自动化地从互联网上抓取数据,并在后续阶段对这些数据进行存储和处理。爬虫广泛应用于搜索引擎索引、数据分析、电子商务价格监控、社交媒体数据采集等领域,是大数据和人工智能应用的重要组成部分。

        目前,我们常用Python来实现爬虫,Python为爬虫提供了多种库和框架,如Requests、BeautifulSoup、Scrapy等,极大地提高了编写爬虫程序的效率,并提高了数据抓取的效率和准确性。

2. 爬虫的工作流程

        一个完成的爬虫程序,大致具有如下五个步骤:发送请求、接收响应、解析响应、数据清洗与存储、循环爬取。

  1. 发送请求(Request):爬虫向目标网站发送 HTTP 请求,常见的请求方法包括 GET 和 POST。请求可能携带特定的参数(如查询条件)和头信息(如 User-Agent)。

  2. 接收响应(Response):目标网站的服务器返回 HTTP 响应,通常包含网页的 HTML 源码。响应还可能包括 JSON 数据(如 API 的返回结果)。

  3. 解析响应(Parsing):解析网页内容或 JSON 数据,提取出目标信息。解析工具可以是正则表达式、HTML 解析器(如 BeautifulSoup)或 JSON 解析库。

  4. 数据清洗与存储(Data Cleaning & Storage):清洗提取到的原始数据,去除噪声或冗余内容。将清洗后的数据存储到文件(如 CSV)或数据库中(如 MySQL、MongoDB)。

  5. 循环爬取(Iteration):根据链接结构或其他规则,递归爬取更多页面;或使用 URL 队列管理待爬取的链接。

3. 爬虫的注意事项

        在设计爬虫程序和进行爬虫实操时,我们需注意以下的注意事项,以保证爬虫程序有效、合理、合法地进行,避免带来不必要的麻烦。

  1. 合法性与合规性:我们的爬虫程序必须遵守目标网站的 robotx.txt 文件中的爬取规则。在爬虫时,不得抓取或使用受版权保护的数据,并要遵守当地法律法规,避免侵犯用户隐私。

  2. 对目标网站的影响:在设计爬虫程序时,要避免频繁发送请求对目标服务器造成负担,并设置合理的请求间隔。

  3. 数据安全与隐私:不爬取敏感信息(如个人隐私数据),并确保提取的数据不得用于非法用途。

二、Requests模块

1. 什么是 Requests 模块

        Requests 是 Python 的一个 HTTP 客户端库,支持发送各种类型的 HTTP 请求,包括 GET、POST、PUT、DELETE 等。它可以帮助我们与网页服务器交互,获取需要的数据。目前,Requests 模块的最新版本是 requests 2.32.3,更新于2024年5月29日。Requests 模块的官方文档:requests · PyPI

2. 安装 Requests 模块

        首先,确保你已经安装了 requests 模块。如果没有安装,可以运行以下命令:

pip install requests

        当安装完成后,你可以在 Python 中使用 requests 模块。

3. 基本用法:发送 HTTP 请求

        发送 HTTP 请求是 requests 模块的最基本用法。我们常用 GET 请求和 POST 请求。

        GET 请求是最常见的 HTTP 请求方式,用于从服务器获取数据。你可以理解成,让 Python 代码去访问一个网页,并把网页内容拿回来。在爬虫中,我们常使用 GET 请求来获取一个网页的内容。

import requests

# 发送 GET 请求
response = requests.get('...') # 输入拟访问的网址

# 输出响应的文本内容
print(response.text)

        在爬虫中,有时候我们需要向服务器提交一些数据,比如登录信息。这时我们需要用到 POST 请求。

import requests

# 表单数据
data = {'username': 'test', 'password': '1234'}

# 发送 POST 请求
response = requests.post('...', data=data) # 输入拟访问的网址

# 输出服务器返回的内容
print(response.text)

4. 模拟浏览器:User-Agent

        很多网站会检查你的请求,看它是不是来自真实的浏览器。如果不是,它可能会拒绝响应。为了让爬虫“伪装”成浏览器,我们可以加一些特殊信息,比如 User-Agent。

import requests

# 添加请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0 Safari/537.36'
}

# 带上伪装信息访问网页
response = requests.get('...', headers=headers) # 输入拟访问的网址

# 打印网页内容
print(response.text)

5. 处理返回的结果

        服务器会给你的请求一个回复(我们称之为“响应”)。你可以用以下几种方法处理:

  •         网页内容:response.text 以字符串形式会返回网页的内容(通常是 HTML)。
  •         检查是否成功:response.status_code 返回一个数字,比如 200 表示成功,404 表示页面不存在。
import requests

response = requests.get('...') # 输入拟访问的网址

# 检查状态码
if response.status_code == 200:
    print("请求成功!")
    print(response.text)  # 打印网页内容
else:
    print(f"请求失败,状态码:{response.status_code}")

6. 下载文件

        你可以用 requests 下载网页上的文件,比如图片或文档。

import requests

url = '...' # 图片的地址

# 获取图片
response = requests.get(url)

# 保存到本地
with open('image.jpg', 'wb') as file:
    file.write(response.content)

print("图片下载完成!")

7. 错误处理

        有时候,服务器可能比较慢,或者你的网络不好,代码会报错。这时,我们可以加一个“错误处理”的部分,让代码更加稳健。requests 提供了异常处理机制,确保我们的爬虫能够更有效的运行。

import requests

try:
    response = requests.get('...', timeout=5)  # 最多等待 5 秒
    if response.status_code == 200:
        print("请求成功!")
        print(response.text)
    else:
        print(f"请求失败,状态码:{response.status_code}")
except requests.exceptions.Timeout:
    print("请求超时!")
except requests.exceptions.RequestException as e:
    print(f"请求出错:{e}")

三、BeautifulSoup 模块

1. 什么是 BeautifulSoup 模块

        如果说 requests 是帮我们“爬”下网页内容的工具,那么 BeautifulSoup 就是帮我们从这些内容中“挑出有用数据”的工具。它特别擅长处理 HTML 和 XML 格式的内容,简单又强大。它为文档创建解析树,可用于从 HTML 中提取数据,
这对于网页抓取非常有用。

        表格中是 BeautifulSoup 模块常用的函数,及其对应的功能。

soup.title打印标题
soup.title.name打印标题的标签
soup.title.text打印标题的文本
soup.p打印第一个p标签
soup.p.parent打印第一个p标签的父标签内容
soup.p['class']获取第一个p标签的class属性值
soup.p.get('class')获取第一个p标签的class属性值,功能与 soup.p['class']相似,但如果没有class属性,不会报错,而是返回None。
soup.find(id="?")根据 id 属性值查找第一个符合条件的标签并返回(返回的是整个标签内容)
soup.find(class_='?')根据class属性值查找第一个符合条件的标签并返回(返回整个标签内容)。
soup.findAll(name=?1,attrs=?2)查找所有符合条件的标签并返回一个列表。

2. 安装 BeautifulSoup 模块

        首先,确保你已经安装了 BeautifulSoup 模块。如果没有安装,可以运行以下命令:

pip install beautifulsoup4 requests

        当安装完成后,你可以在 Python 中使用 BeautifulSoup 模块。

3. 基础用法:从网页中提取标题

        首先,我们需要用到 requests 模块把网页内容下载下来:

import requests

# 获取网页内容
response = requests.get('...')

# 打印网页的 HTML 内容
print(response.text)

        输出的内容是一大段 HTML。它可能看起来很复杂,但是我们可以使用 BeautifulSoup 来处理它。BeautifulSoup 可以帮我们把这些复杂的 HTML 转成结构化的内容,这样我们就能轻松找到需要的部分。

from bs4 import BeautifulSoup

# 假设我们已经用 requests 获取了网页内容
html = response.text

# 创建一个 BeautifulSoup 对象
soup = BeautifulSoup(html, 'html.parser')

# 提取网页标题
title = soup.title.string
print("网页标题是:", title)
  • soup.title 会找到网页中的 <title> 标签。
  • .string 是取标签里的文字内容。

4. 提取特定的内容:寻找标签

        HTML 是由很多标签(如<h1>、<p>、<a>)组成的。我们可以用 BeautifulSoup 找到这些标签。

# 找到网页中的所有链接
links = soup.find_all('a')

for link in links:
    print("链接地址:", link.get('href'))
  • find_all ('a') 会找到网页中所有的 <a> 标签。

  • link.get ('href') 是获取每个链接的地址。

        当我们想要找到某个特定的段落时,可以使用 soup.find。例如查找第一个段落。

# 找到第一个段落
paragraph = soup.find('p')
print("段落内容:", paragraph.text)

5. 更复杂的查找方法

        有时候我们需要更精确地查找标签,比如根据它的“类名”或“id”。

# 找到 class 是 "example-class" 的标签
results = soup.find_all(class_='example-class')

for result in results:
    print("内容:", result.text)
  • class = 'example-class' 是制定查找标签的类名。
# 找到 id 是 "main-content" 的标签
content = soup.find(id='main-content')
print("内容:", content.text)
  • id = 'main-content' 是制定查找标签的 id。

6. 查找标签的嵌套内容

        HTML 标签是嵌套的,比如:

<div class="container">
    <h1>标题</h1>
    <p>这是一个段落。</p>
</div>

        我们可以从外层标签进入到内层标签。

# 找到 class 是 "container" 的 div
container = soup.find(class_='container')

# 再从这个 div 中找 h1
title = container.find('h1').text
print("标题是:", title)

# 再从这个 div 中找 p
paragraph = container.find('p').text
print("段落是:", paragraph)

四、爬虫案例

        以上就是有关爬虫和 Requests、BeautifulSoup 模块的基础知识。以下是一个爬虫案例,使用了Requests、BeautifulSoup 模块爬取豆瓣电影Top250榜单。

【Python】-- 使用BeautifulSoup爬取豆瓣电影Top250榜单-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值