爬虫的bs4、xpath、requests、selenium、scrapy的基本用法

2024-08-21 15:20

本文主要是介绍爬虫的bs4、xpath、requests、selenium、scrapy的基本用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Python 中,BeautifulSoup(简称 bs4)、XPathRequestsSeleniumScrapy 是五种常用于网页抓取和解析的工具。

1. BeautifulSoup (bs4)

BeautifulSoup 是一个简单易用的 HTML 和 XML 解析库,常用于从网页中提取数据。
它的优点是易于学习和使用,适合处理静态页面的解析。

安装 BeautifulSoup
pip install beautifulsoup4
示例:解析 HTML 并提取数据
from bs4 import BeautifulSouphtml_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a>
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
<p class="story">...</p>
</body></html>
"""soup = BeautifulSoup(html_doc, 'html.parser')# 提取标题
print(soup.title.string)  # 输出: The Dormouse's story# 提取所有链接
for link in soup.find_all('a'):print(link.get('href'))

2. XPath

XPath 是一种用于从 XML 文档中选择节点的语言,它在解析和提取 HTML 内容时非常强大。
lxmlScrapy 等库支持使用 XPath。

示例:使用 lxml 和 XPath 提取数据
from lxml import etreehtml = """
<html><body>
<div><p class="title">Title 1</p><p class="content">Content 1</p>
</div>
<div><p class="title">Title 2</p><p class="content">Content 2</p>
</div>
</body></html>
"""tree = etree.HTML(html)# 提取所有标题
titles = tree.xpath('//p[@class="title"]/text()')
print(titles)  # 输出: ['Title 1', 'Title 2']

3. Requests

Requests 是一个用于发送 HTTP 请求的简单而强大的库,适合抓取静态网页内容。
它常与 BeautifulSouplxml 配合使用。

安装 Requests
pip install requests
示例:发送 HTTP 请求并获取网页内容
import requestsurl = 'http://example.com'
response = requests.get(url)if response.status_code == 200:print(response.text)  # 输出网页的 HTML 内容

4. Selenium

Selenium 是一个自动化工具,常用于需要浏览器交互或处理动态网页的抓取任务。
它可以模拟用户操作,如点击、输入、滚动等。

安装 Selenium 和浏览器驱动
pip install selenium

下载并配置浏览器驱动,如 chromedriver(Chrome)或 geckodriver(Firefox)。

示例:使用 Selenium 自动化浏览器操作
from selenium import webdriver
from selenium.webdriver.common.by import By# 启动 Chrome 浏览器
driver = webdriver.Chrome()# 打开网页
driver.get('http://example.com')# 查找元素并提取内容
element = driver.find_element(By.TAG_NAME, 'h1')
print(element.text)  # 输出页面上的第一个 <h1> 标签的文本# 关闭浏览器
driver.quit()

5. Scrapy

Scrapy 是一个功能强大的爬虫框架,适合大规模数据抓取。
它支持异步请求、数据处理管道、自动化抓取等功能,非常适合复杂的抓取任务。

安装 Scrapy
pip install scrapy
示例:创建并运行 Scrapy 爬虫
# 创建 Scrapy 项目
scrapy startproject myproject# 定义一个爬虫
import scrapyclass ExampleSpider(scrapy.Spider):name = 'example'start_urls = ['http://example.com']def parse(self, response):for title in response.xpath('//h1/text()').getall():yield {'title': title}# 运行爬虫
# 在命令行中执行: scrapy crawl example

工具选择指南

  • BeautifulSoup (bs4):适合解析静态 HTML,特别是简单的网页抓取任务。
  • XPath:强大的选择语言,用于复杂的 HTML/XML 解析,适合与 lxmlScrapy 一起使用。
  • Requests:用于发送 HTTP 请求,适合抓取静态网页内容。
  • Selenium:适合处理动态网页和需要模拟用户操作的场景。
  • Scrapy:适合大规模、复杂的网页抓取任务,支持异步处理和数据管道。

这篇关于爬虫的bs4、xpath、requests、selenium、scrapy的基本用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093531

相关文章

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问