Python爬虫有哪些库,分别怎么用

2023-09-13 11:23:16

目录

Python常用爬虫库

代码示例

requests + BeautifulSoup

Scrapy

Selenium

PyQuery

Axios

requests-html

pyppeteer

总结


Python是一种非常流行的编程语言,因其易学易用和广泛的应用而受到开发者的喜爱。在Python中,有许多库可以用于爬虫程序的开发,这些库可以帮助我们快速地从互联网上抓取数据。本文将介绍一些常用的Python爬虫库及其用法。

Python常用爬虫库

Python的爬虫库非常丰富,以下是一些常用的库及其用法:

  1. requests:用于发送HTTP请求,获取响应内容。用法:安装requests库后,导入库,使用get或post方法发送请求,接收响应对象,从中提取所需信息。
  2. BeautifulSoup:用于解析HTML或XML文档,提取所需数据。用法:安装BeautifulSoup库后,导入库,将待解析的页面源码作为参数传入BeautifulSoup的构造函数中,使用选择器定位所需元素,使用属性或方法获取数据。
  3. Scrapy:一个基于Twisted框架的爬虫框架,可用于大规模数据采集。用法:安装Scrapy框架后,创建Scrapy项目,编写Spider和Item Pipeline等组件,运行Scrapy命令进行数据采集和存储。
  4. Selenium:用于模拟浏览器行为,动态获取网页数据。用法:安装Selenium库后,导入库,创建WebDriver对象,使用对象执行浏览器行为(如点击、输入等),获取动态生成的数据。
  5. PyQuery:用于解析HTML或XML文档,与jQuery选择器类似。用法:安装PyQuery库后,导入库,将待解析的页面源码作为参数传入PyQuery的构造函数中,使用选择器定位所需元素,使用属性或方法获取数据。
  6. Axios:用于发送HTTP请求,获取响应内容,支持Promise和async/await用法:安装Axios库后,导入库,使用get或post方法发送请求,接收响应对象,从中提取所需信息。
  7. requests-html:基于requests库的扩展库,可解析HTML页面。用法:安装requests-html库后,导入库,使用get或post方法发送请求,接收响应对象,从中提取所需信息。
  8. pyppeteer:用于模拟浏览器行为,动态获取网页数据,支持headless模式。用法:安装pyppeteer库后,导入库,创建Browser对象,使用对象创建Page对象,执行浏览器行为(如点击、输入等),获取动态生成的数据。

以上是一些常用的Python爬虫库及其用法,不同的库适用于不同的场景和需求。选择合适的库和方法可以大大提高数据采集的效率和准确性。

代码示例

requests + BeautifulSoup

import requests  
from bs4 import BeautifulSoup  
  
url = 'https://www.example.com'  
response = requests.get(url)  
soup = BeautifulSoup(response.text, 'html.parser')  
  
# 获取网页标题  
title = soup.title.string  
print('网页标题:', title)  
  
# 获取网页内容  
content = soup.p.string  
print('网页内容:', content)

Scrapy

import scrapy  
  
class ExampleSpider(scrapy.Spider):  
    name = 'example'  
    start_urls = ['https://www.example.com']  
  
    def parse(self, response):  
        # 提取所需数据  
        title = response.css('title::text').get()  
        content = response.css('p::text').get()  
        yield {'title': title, 'content': content}

Selenium

from selenium import webdriver  
  
# 初始化WebDriver,使用Chrome浏览器  
driver = webdriver.Chrome()  
  
# 打开指定URL  
driver.get('https://www.example.com')  
  
# 定位元素并输入文本  
element = driver.find_element_by_id('username')  
element.send_keys('myusername')  
  
# 定位元素并点击  
element = driver.find_element_by_id('password')  
element.send_keys('mypassword')  
element.submit()  
  
# 等待页面加载完成  
driver.implicitly_wait(10)  
  
# 定位元素并检查文本内容  
element = driver.find_element_by_id('welcome-message')  
assert 'Welcome, myusername!' in element.text  
  
# 关闭浏览器窗口  
driver.quit()

PyQuery

from pyquery import PyQuery as pq  
  
# 加载HTML文档  
html = """  
<html>  
<head>  
    <title>Example</title>  
</head>  
<body>  
    <div id="content">  
        <h1>Hello, World!</h1>  
        <p>This is a paragraph.</p>  
        <ul>  
            <li>Item 1</li>  
            <li>Item 2</li>  
            <li>Item 3</li>  
        </ul>  
    </div>  
</body>  
</html>  
"""  
  
# 解析HTML文档  
doc = pq(html)  
  
# 选择元素  
title = doc('title').text()  
heading = doc('#content h1').text()  
paragraph = doc('#content p').text()  
items = doc('#content ul li').texts()  
  
# 打印结果  
print(title)       # Example  
print(heading)     # Hello, World!  
print(paragraph)   # This is a paragraph.  
print(items)       # ['Item 1', 'Item 2', 'Item 3']

Axios

Axios 是一个基于 Promise 的 HTTP 客户端,可以在浏览器和 Node.js 中使用。以下是一个简单的 Axios 代码示例:

const axios = require('axios');  
  
axios.get('https://api.example.com/data')  
  .then(function (response) {  
    console.log(response.data);  
  })  
  .catch(function (error) {  
    console.log(error);  
  });

这个示例使用 Axios 发起一个 GET 请求,访问 https://api.example.com/data,并使用 then 方法处理成功响应,使用 catch 方法处理错误。如果请求成功,response.data 将包含响应数据。如果发生错误,error 对象将包含错误信息。 你可以使用 Axios 发起其他类型的 HTTP 请求,例如 POST、PUT 和 DELETE,只需要更改请求方法即可:

axios.post('https://api.example.com/data', {  
    name: 'John Doe',  
    email: 'john@example.com'  
  })  
  .then(function (response) {  
    console.log(response.data);  
  })  
  .catch(function (error) {  
    console.log(error);  
  });

这个示例使用 Axios 发起一个 POST 请求,访问 https://api.example.com/data,并将一个包含 name 和 email 属性的对象作为请求主体发送。

requests-html

from requests_html import HTMLSession  
  
# 创建一个 HTMLSession 实例  
session = HTMLSession()  
  
# 使用 get 方法获取一个网页  
response = session.get('https://example.com')  
  
# 使用 BeautifulSoup 来解析网页内容  
soup = response.html  
  
# 输出页面的标题  
print(soup.title)  
  
# 输出所有的段落标签 <p>  
for p in soup.find_all('p'):  
    print(p.text)

pyppeteer

import asyncio  
from pyppeteer import launch  
  
async def main():  
    # 启动浏览器  
    browser = await launch()  
    page = await browser.newPage()  
  
    # 打开网页  
    await page.goto('http://example.com')  
  
    # 截图  
    await page.screenshot({'path': 'example.png'})  
  
    # 关闭浏览器  
    await browser.close()  
  
asyncio.get_event_loop().run_until_complete(main())

总结


以上是一些常用的Python爬虫库及其用法,每个库都有其独特的特点和优势,选择合适的库取决于具体的应用场景和需求。在编写爬虫程序时,还需要注意一些道德和法律规范,以确保我们的爬虫程序不会侵犯他人的隐私和权益。

更多推荐

极简解析!IP计费的s5爬虫IP

大家好!今天我将为大家分享关于s5爬虫IP服务的知识。对于经常做爬虫的小伙伴来说,需要大量的爬虫IP支持爬虫业务,那么对于选择什么样的爬虫IP,我想我有很多发言权。下面我们一起了解下IP计费的s5爬虫IP的知识,废话不多说,让我们开始吧!第一部分:了解s5爬虫和IP计费首先,让我们简单了解一下s5爬虫和IP计费是什么。

最新AI系统ChatGPT源码+支持OpenAI全模型+国内AI模型+AI绘画

一、SparkAI智能创作系统SparkAi创作系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!SparkAi程序使用Ne

【AI语言大模型】星火使用介绍

一、前言现在AI语言大模型是百花齐放,挺好!有竞争,有发展,才能推出更好的产品。现在,科大讯飞就推出了大语言模型——星火!能够学习和理解人类的语言,进行多轮对话,回答问题,高效便捷地帮助人们获取信息、知识和灵感。星火在对话栏设置了三个插件:文档回答、PPT生成、简历生成,下面详细介绍三个插件的用法。二、插件介绍如下图所

9 种方法使用 Amazon CodeWhisperer 快速构建应用

AmazonCodeWhisperer是一款很赞的生成式人工智能编程工具。自从在工作中使用了CodeWhisperer,我发现不仅代码编译的效率有所提高,应用开发的工作也变得快乐起来。然而,任何生成式AI工具的有效学习都需要初学者要有接受新工作方式的心态和意愿。AmazonCodeWhispererAICodeGene

一篇关于vue的入门的详细介绍

目录一.介绍二.库和框架的区别三.什么是MVVM模式四.实例4.1.Vue开发示例4.2.双向数据绑定4.3.生命周期好啦,今天的分享就到这了,希望能够帮到你呢!😊😊一.介绍Vue.js是一种流行的JavaScript框架,用于构建用户界面。它被设计为一个渐进式框架,可以逐步应用到现有项目中,也可以作为一个完整的单

【JVM】Java类的加载机制!

一、类的生命周期类加载过程包含:加载、验证、准备、解析和初始化,一共包括5个阶段。(1)加载:简单来说就是将java类的字节码文件加载到机器内存中。在加载类时,Java虚拟机必须完成以下3件事情:通过类的完全限定名称获取定义该类的二进制字节流。将该字节流表示的静态存储结构转换为Metaspace元空间区的运行时存储结构

科锐逆向第二阶段(一)SDK

基本概念什么是SDKSDK是软件开发工具包(SoftwareDevelopmentKit)的缩写。它是一个集成了软件开发所需工具、库文件、示例代码和文档等资源的软件包。SDK通常由软件开发公司或平台提供,旨在帮助开发人员构建、测试和部署特定类型的应用程序、库或服务。它提供了一套开发工具,使开发人员能够利用平台或框架的功

idea把项目打成jar包步骤详解

最近产品需要预研一个小功能,开始后在本地开发测试好之后,需要打成jar提供出去,今天弄完了,决定把这个步骤记录下来,便于以后轻车熟路。打成jar要有mian方法的入口,所以我们在代码中需要定义一个main方法,然后通过这个main方法调用我们的核心逻辑代码。下面是我的代码示例:publicstaticvoidmain(

基于微信小程序的图书管理系统设计与实现(源码+lw+部署文档+讲解等)

前言💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗👇🏻精彩专栏推荐订阅👇🏻2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选

使用 OpenWRT 设置 Banana Pi BPI-R3开源硬件路由器

这里介绍如何使用pfSense将ZimaBoard216设置为防火墙的链接。我们正在为小型板计算机建立一个专用网络,这样当我开始教授Linux时,我就可以显示和共享它的IP。现在为我的网络设置一条到pfSense后面的路由。这是为了提供另一个级别的安全性。我有两台Banana-Pi路由器1)Banana-PiR2Pro

【案例教学】华为云API图引擎服务 GES的便捷性—AI帮助快速处理图片小助手

云服务、API、SDK,调试,查看,我都行阅读短文您可以学习到:人工智能AI快速处理图片1IntelliJIDEA之API插件介绍API插件支持VSCodeIDE、IntelliJIDEA等平台、以及华为云自研CodeArtsIDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API插件关联华为云服务下

热文推荐