首页 > 编程语言 >Python有哪些常见的、好用的爬虫框架?

Python有哪些常见的、好用的爬虫框架?

时间:2024-09-11 21:55:25浏览次数:8  
标签:网页 Python 爬虫 response HTML print 好用

Python有非常多的爬虫框架,主要分为三大类。

一种是请求库,比如requests、urllib、httpx等,负责向目标网站发送HTTP请求并获取响应数据。Scrapy也属于这个大类,不过Scrapy功能更加完善,可以提供异步网络请求、高效的数据提取与灵活的扩展性,适用于构建复杂和大规模的网页爬虫应用。

另一种是解析库,比如beautifulsoup4、lxml、pyquery等,负责解析HTML或XML等格式的网页内容,来提取数据。

最后一种是自动化工具,比如Playwright、Selenium、Pyppeteer等,负责浏览器自动化操作,可以用于浏览器自动化、爬虫、Web UI测试。

下面介绍下这三类工具中,最常用的几个库的简单用法。

requests

不用多说,requests 是 Python 中一个非常流行的第三方库,用于发送各种 HTTP 请求。它简化了 HTTP 请求的发送过程,使得从网页获取数据变得非常简单和直观。

requests 库提供了丰富的功能和灵活性,支持多种请求类型(如 GET、POST、PUT、DELETE 等),可以发送带有参数、头信息、文件等的请求,并且能够处理复杂的响应内容(如 JSON、XML 等)。

import requests  
  
# 目标URL  
url = 'https://httpbin.org/get'  
  
# 发送GET请求  
response = requests.get(url)  
  
# 检查请求是否成功  
if response.status_code == 200:  
    # 打印响应内容  
    print(response.text)  
else:  
    # 打印错误信息  
    print(f'请求失败,状态码:{response.status_code}')

urllib3

urllib3 是 Python内置网页请求库,类似于 Python 中的requests库,主要用于发送HTTP请求和处理HTTP响应。它建立在Python标准库的urllib模块之上,但提供了更高级别、更健壮的API。

urllib3可以用于处理简单身份验证、cookie 和代理等复杂任务。

添加图片注释,不超过 140 字(可选)


import urllib3  
  
# 创建一个HTTP连接池  
http = urllib3.PoolManager()  
  
# 目标URL  
url = 'https://httpbin.org/get'  
  
# 使用连接池发送GET请求  
response = http.request('GET', url)  
  
# 检查响应状态码  
if response.status == 200:  
    # 打印响应内容(注意:urllib3默认返回的是bytes类型,这里我们将其解码为str)  
    print(response.data.decode('utf-8'))  
else:  
    # 如果响应状态码不是200,则打印错误信息  
    print(f'请求失败,状态码:{response.status}')  
  
# 注意:urllib3没有直接的方法来处理JSON响应,但你可以使用json模块来解析  
# 如果响应内容是JSON,你可以这样做:  
# import json  
# json_response = json.loads(response.data.decode('utf-8'))  
# print(json_response)

BeautifulSoup4

BeautifulSoup是最常用的Python网页解析库之一,可将 HTML 和 XML 文档解析为树形结构,能更方便地识别和提取数据。

BeautifulSoup可以自动将输入文档转换为 Unicode,将输出文档转换为 UTF-8。此外,你还可以设置 BeautifulSoup 扫描整个解析页面,识别所有重复的数据(例如,查找文档中的所有链接),只需几行代码就能自动检测特殊字符等编码。

添加图片注释,不超过 140 字(可选)


from bs4 import BeautifulSoup  
  
# 假设这是我们从某个网页获取的HTML内容(这里直接以字符串形式给出)  
html_content = """  
<html>  
<head>  
    <title>示例网页</title>  
</head>  
<body>  
    <h1>欢迎来到BeautifulSoup示例</h1>  
    <p class="introduction">这是一个关于BeautifulSoup的简单示例。</p>  
    <a href="https://www.example.com/about" class="link">关于我们</a>  
</body>  
</html>  
"""  
  
# 使用BeautifulSoup解析HTML内容,这里默认使用Python的html.parser作为解析器  
# 你也可以指定其他解析器,如'lxml'或'html5lib',但需要先安装它们  
soup = BeautifulSoup(html_content, 'html.parser')  
  
# 提取并打印<title>标签的文本内容  
print("网页标题:", soup.title.string)  # 网页标题: 示例网页  
  
# 提取并打印<p>标签的文本内容,这里使用class属性来定位  
print("介绍内容:", soup.find('p', class_='introduction').string)  # 介绍内容: 这是一个关于BeautifulSoup的简单示例。  
  
# 提取并打印<a>标签的href属性和文本内容  
link = soup.find('a', class_='link')  
print("链接地址:", link['href'])  # 链接地址: https://www.example.com/about  
print("链接文本:", link.string)  # 链接文本: 关于我们  
  
# 注意:如果HTML内容中包含多个相同条件的标签,你可以使用find_all()来获取它们的一个列表  
# 例如,要获取所有<a>标签的href属性,可以这样做:  
all_links = [a['href'] for a in soup.find_all('a')]  
print("所有链接地址:", all_links)  # 假设HTML中有多个<a>标签,这里将列出它们的href属性  
# 注意:上面的all_links列表在当前的HTML内容中只有一个元素,因为只有一个<a>标签

lxml

lxml是一个功能强大且高效的Python库,主要用于处理XML和HTML文档。它提供了丰富的API,使得开发者可以轻松地读取、解析、创建和修改XML和HTML文档。

from lxml import etree  
  
# 假设我们有一段HTML或XML内容,这里以HTML为例  
html_content = """  
<html>  
  <head>  
    <title>示例页面</title>  
  </head>  
  <body>  
    <h1>欢迎来到我的网站</h1>  
    <p class="description">这是一个使用lxml解析的示例页面。</p>  
    <ul>  
      <li>项目1</li>  
      <li>项目2</li>  
    </ul>  
  </body>  
</html>  
"""  
  
# 使用lxml的etree模块来解析HTML或XML字符串  
# 注意:对于HTML内容,我们使用HTMLParser解析器  
parser = etree.HTMLParser()  
tree = etree.fromstring(html_content, parser=parser)  
  
# 查找并打印<title>标签的文本  
title = tree.find('.//title').text  
print("页面标题:", title)  
  
# 查找并打印class为"description"的<p>标签的文本  
description = tree.find('.//p[@class="description"]').text  
print("页面描述:", description)  
  
# 查找所有的<li>标签,并打印它们的文本  
for li in tree.findall('.//li'):  
    print("列表项:", li.text)  
  
# 注意:lxml也支持XPath表达式来查找元素,这里只是简单展示了find和findall的用法  
# XPath提供了更强大的查询能力

Selenium

Selenium 是一款基于浏览器地自动化程序库,可以抓取网页数据。它能在 JavaScript 渲染的网页上高效运行,这在其他 Python 库中并不多见。

在开始使用 Python 处理 Selenium 之前,需要先使用 Selenium Web 驱动程序创建功能测试用例。

Selenium 库能很好地与任何浏览器(如 Firefox、Chrome、IE 等)配合进行测试,比如表单提交、自动登录、数据添加/删除和警报处理等。

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.common.by import By  
from selenium.webdriver.support.ui import WebDriverWait  
from selenium.webdriver.support import expected_conditions as EC  
  
# 设置WebDriver的路径(根据你的系统路径和WebDriver版本修改)  
driver_path = '/path/to/your/chromedriver'  
  
# 初始化WebDriver  
driver = webdriver.Chrome(executable_path=driver_path)  
  
try:  
    # 打开网页  
    driver.get('https://www.example.com')  
  
    # 等待页面加载完成(这里使用隐式等待,针对所有元素)  
    # 注意:隐式等待可能会影响性能,通常在脚本开始时设置一次  
    driver.implicitly_wait(10)  # 秒  
  
    # 查找并输入文本到搜索框(假设搜索框有一个特定的ID或类名等)  
    # 这里以ID为'search'的输入框为例  
    search_box = driver.find_element(By.ID, 'search')  
    search_box.send_keys('Selenium WebDriver')  
  
    # 提交搜索(假设搜索按钮是一个类型为submit的按钮或是一个可以点击的输入框)  
    # 如果搜索是通过按Enter键触发的,可以直接在search_box上使用send_keys(Keys.ENTER)  
    # 这里假设有一个ID为'submit'的按钮  
    submit_button = driver.find_element(By.ID, 'submit')  
    submit_button.click()  
  
    # 等待搜索结果加载完成(这里使用显式等待作为示例)  
    # 假设搜索结果页面有一个特定的元素,我们等待它出现  
    wait = WebDriverWait(driver, 10)  # 等待最多10秒  
    element = wait.until(EC.presence_of_element_located((By.ID, 'results')))  
  
    # 执行其他操作...  
  
finally:  
    # 关闭浏览器  
    driver.quit()

其他爬虫工具

除了Python库之外,还有其他爬虫工具可以使用。

八爪鱼爬虫

八爪鱼爬虫是一款功能强大的桌面端爬虫软件,主打可视化操作,即使是没有任何编程基础的用户也能轻松上手。

官网下载:https://affiliate.bazhuayu.com/hEvPKU

八爪鱼支持多种数据类型采集,包括文本、图片、表格等,并提供强大的自定义功能,能够满足不同用户需求。此外,八爪鱼爬虫支持将采集到的数据导出为多种格式,方便后续分析处理。

亮数据爬虫

亮数据平台提供了强大的数据采集工具,比如Web Scraper IDE、亮数据浏览器、SERP API等,能够自动化地从网站上抓取所需数据,无需分析目标平台的接口,直接使用亮数据提供的方案即可安全稳定地获取数据。

网站使用:https://get.brightdata.com/weijun

亮数据浏览器支持对多个网页进行批量数据抓取,适用于需要JavaScript渲染的页面或需要进行网页交互的场景。

Web Scraper

Web Scraper是一款轻便易用的浏览器扩展插件,用户无需安装额外的软件,即可在Chrome浏览器中进行爬虫。插件支持多种数据类型采集,并可将采集到的数据导出为多种格式。

无论是Python库还是爬虫软件,都能实现数据采集任务,可以选择适合自己的。当然记得在使用这些工具时,一定要遵守相关网站的爬虫政策和法律法规。

标签:网页,Python,爬虫,response,HTML,print,好用
From: https://blog.csdn.net/Pydatas/article/details/142069418

相关文章

  • 在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境
    目录在线编程实现!如何在Java后端通过DockerClient操作Docker生成python环境一、为什么要用后端程序操作Docker二、安装Docker1、安装Docker2、启动Docker三、DockerClient与CMD操作Docker的区别四、干货!如何使用DockerClient实现在线编程1、前置工作①引入并安装依赖......
  • Python 工厂模式
    在Python中,工厂模式(FactoryPattern)是一种常用的创建型设计模式,用于创建对象时不会将具体类的信息暴露给客户端,而是通过一个共同的接口来指向新创建的对象。工厂模式主要用来创建复杂对象,并隐藏实例化逻辑,使得客户端代码与具体类的实现解耦,从而提高系统的灵活性和可扩展性。工厂模......
  • flask+python抗洪救灾管理系统 2rucy-django毕业设计项目
    目录技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取技术栈和环境说明本系统以Python开发语言......
  • 基于python+flask框架的学生综合测评管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着教育信息化的不断深入,传统的学生综合测评方式已难以满足现代高校对学生全面、客观评价的需求。传统方法往往依赖于纸质记录与人工计算......
  • 基于python+flask框架的基于安卓的音乐播放器系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,智能手机已成为人们日常生活中不可或缺的一部分,而音乐作为人类情感表达的重要媒介,其播放与分享方式也随之发......
  • 基于python+flask框架的健身房管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着健康意识的不断提升,健身房已成为现代人追求健康生活的重要场所。然而,随着健身房规模的扩大和会员数量的激增,传统的人工管理模式已难以......
  • Python基础
    目录1.常见字面量2.Python中的注释3.Python中的变量变量是什么?及作用?变量的格式?变量的特征?4.Python中查看数据的数据类型5.Python数据类型的转换(字符串,整数,浮点数)6.Python中的标识符1.用户编写代码时,对变量.类.方法等编写的名字,叫做标识符.2.标识符命名......
  • 【python脚本】springboot检测脚本
    原创CatalyzeSecimportrequestsimporturllib3urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)session=requests.session()#从文本文件中读取withopen('dic.txt','r')asfile:paths=file.readlines()#移除每个末尾的换行符......
  • Mac 上有哪些好用的 txt 纯文本编辑器?
    在Mac上,有很多优秀的纯文本编辑器供用户选择,这些编辑器不仅功能强大,而且界面友好,非常适合编写代码、管理笔记或是进行简单的文本处理。如果你想找一款第三方txt纯文本编辑器,用来代替默认的「文本编辑」,可以看看下面这三个。UltraEditUltraEdit自称是「Mac上最好的文本......
  • Python(二)-运算符
    常见的运算符(1)算术运算符:+、-、*、/、//、%、**;(2)赋值运算符:=、+=、-=、*=、/=、//=、%=、**=;(3)比较运算符:>、<、>=、<=、==、!=;(4)逻辑运算符:not、and、or。算术运算符算术运算符名称描述+加法两个数相加,如6+12=18。-减法两个数相减,如25-9=16。*乘法两个数相乘,如3*7=......