Python爬虫常用库有哪些?

数据科技有技术 2024-09-28 18:02:47

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

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

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

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

这里介绍6个最常用的库。

1. BeautifulSoup

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

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

from bs4 import BeautifulSoup # 假设这是我们从某个网页获取的HTML内容(这里直接以字符串形式给出) html_content = """ <html> <head> <title>示例网页</title> </head> <body> <h1>欢迎来到BeautifulSoup示例</h1> <p>Scrapy是一个流行的高级爬虫框架,可快速高效地抓取网站并从其页面中提取结构化数据。

由于 Scrapy 主要用于构建复杂的爬虫项目,并且它通常与项目文件结构一起使用

Scrapy 不仅仅是一个库,还可以用于各种任务,包括监控、自动测试和数据挖掘。这个 Python 库包含一个内置的选择器(Selectors)功能,可以快速异步处理请求并从网站中提取数据。

# 假设这个文件名为 my_spider.py,但它实际上应该放在 Scrapy 项目的 spiders 文件夹中 import scrapy MySpider(scrapy.Spider): # Spider 的名称,必须是唯一的 name = 'example_spider' # 允许爬取的域名列表(可选) # allowed_domains = ['example.com'] # 起始 URL 列表 start_urls = [ 'http://example.com/', ] def parse(self, response): # 这个方法用于处理每个响应 # 例如,我们可以提取网页的标题 title = response.css('title::text').get() if title: # 打印标题(在控制台输出) print(f'Title: {title}') # 你还可以继续爬取页面中的其他链接,这里只是简单示例 # 例如,提取所有链接并请求它们 # for href in response.css('a::attr(href)').getall(): # yield scrapy.Request(url=response.urljoin(href), callback=self.parse) # 注意:上面的代码只是一个 Spider 类的定义。 # 要运行这个 Spider,你需要将它放在一个 Scrapy 项目中,并使用 scrapy crawl 命令来启动爬虫。 # 例如,如果你的 Scrapy 项目名为 myproject,并且你的 Spider 文件名为 my_spider.py, # 那么你应该在项目根目录下运行以下命令: # scrapy crawl example_spider3. 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()4. 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}')5. urllib3

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

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

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)6. 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>除了Python库之外,还有其他爬虫工具可以使用。

八爪鱼爬虫

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

官网下载:

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

亮数据爬虫

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

网站使用:

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

Web Scraper

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

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

0 阅读:12

数据科技有技术

简介:感谢大家的关注