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

news2024/11/28 14:40:28

目录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1028460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“探索前后端分离架构下的Vue.js应用开发“

目录 引言1. 前后端分离2. Vue的简介1. Vue.js是什么&#xff1f;2. 库和框架的区别3. MVVM的介绍 3. Vue的入门数据的双向绑定数据的单项绑定 4. Vue的生命周期总结 引言 在当今互联网时代&#xff0c;前后端分离架构已经成为了Web应用开发的主流趋势。前后端分离架构的核心思…

【二叉树-02】二叉树的最近公共祖先-力扣 236 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

DC系列靶机3通关教程

文章目录 信息收集主机扫描端口扫描目录扫描 漏洞查找Joomscansearchsploit 漏洞利用SQL注入密码爆破反弹shell得到交互shell 提权查看操作系统版本信息搜索操作系统漏洞利用exp提权查找flag 信息收集 主机扫描 arp-scan -l端口扫描 nmap -p- -A 192.168.16.162-A&#xff1…

月木学途开发 5.轮播图模块

概述 效果图 数据库设计 轮播图表 DROP TABLE IF EXISTS banner; CREATE TABLE banner (bannerId int(11) NOT NULL AUTO_INCREMENT,bannerUrl longtext,bannerDesc varchar(255) DEFAULT NULL,bannerTypeId int(11) DEFAULT NULL,PRIMARY KEY (bannerId) ) ENGINEInnoDB AU…

【UE 粒子练习】06——创建条带类型粒子

效果 下图呈现的是一种条带粒子跟随普通粒子移动的效果。其中&#xff0c;条带粒子为下图中蓝色部分&#xff0c;橙色部分为普通粒子 步骤 1. 新建一个材质&#xff0c;命名为“Mat_Ribbon”&#xff0c;将用于条带粒子材质 材质域设置为表面&#xff0c;混合模式设置为半透明…

DeepWalk实战---Wiki词条图嵌入可视化

DeepWalk是2014年提出的一种Graph中的Node进行Embedding的 算法&#xff0c;是首次将自然语言处理领域NLP中的 word2vec拓展到了graph。万事万物皆可embedding&#xff0c;所以DeepWalk我感觉在图机器学习中具有非常强的应用价值。 1. 首先打开Anaconda Prompt (Anaconda)&…

分享一个基于uniapp+springboot技术开发的校园失物招领小程序(源码、lw、调试)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

海国图志#7:这一周难忘瞬间,吐血整理,不得不看

这里记录每周值得分享的新闻大图&#xff0c;周日发布。 文章以高清大图呈现&#xff0c;解说以汉语为主&#xff0c;英语为辅&#xff0c;英语句子均来自NYTimes、WSJ、The Guardian等权威媒体原刊。 归档时段&#xff1a;20230911-20230917 摩洛哥&#xff0c;阿米茨米兹 在阿…

calibre和cpolar搭建一个私有的网络书库

Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01; 文章目录 Kindle中国电子书店停运不要慌&#xff0c;十分钟搭建自己的在线书库随时随地看小说&#xff01;1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

树莓派4b装系统到运行 Blazor Linux 本地程序全记录

在Linux下运行gui程序,咱也是第一次做,属于是瞎子过河乱摸一通,写得有什么不对和可以优化的地方,希望各位看官斧正斧正. ##1. 下载烧录器 https://www.raspberrypi.com/software/####我选择的是Raspbian 64位系统,并配置好ssh账号密码,wifi,以便启动后可以直接黑屏ssh连接 ##…

全流程HEC-RAS 1D/2D水动力与水环境模拟丨恒定流模型(1D/2D)、一维非恒定流、二维非恒定流模型、HEC-RAS水质模型

目录 ​专题一 ​水动力模型基础 专题二 恒定流模型(1D/2D) 专题三 一维非恒定流 专题四 二维非恒定流模型&#xff08;一&#xff09; 专题五 二维非恒定流模型&#xff08;二&#xff09; 专题六 HEC-RAS的水质模型 专题七 高级主题 更多应用 水动力与水环境模型的数…

【自学开发之旅】Flask-会话保持-API授权-注册登录

http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存&#xff0c;前面数个服务器A,B,C上去取就好了&#xff0c;业务解耦。—》》现在都是基于token的验证。 以上是基…

stm32学习笔记:GPIO输入

1、寄存器输入输出函数 //读取输入数据寄存器某一个端口的输入值&#xff0c;参数用来指定某一个端口&#xff0c;返回值是 uint8_t类型&#xff0c;用来代表高低电平&#xff08;读取按键的值&#xff09;uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_…

JVM调优笔记

双亲委派机制 app---->ext----->bootstrap 保证系统的核心库不被修改 沙箱安全机制 限制系统资源访问&#xff0c;将java代码限制在虚拟机特定的运行范围中 基本组件 字节码校验器 确保java类文件遵循java规范&#xff0c;帮助java程序实现内存保护类加载器 native…

基于SSM的北京集联软件科技有限公司信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

博客摘录「 MobaXterm登录密码重置」2023年9月21日

登录MobaXterm提示输入密码&#xff0c; 而且还 忘记密码 安装重置密码的工具 可以使用浏览器打开 如下网址&#xff1a; https://mobaxterm.mobatek.net/resetmasterpassword.html 打开如图&#xff1a; 下载MobaXterm软件密码重置工具&#xff0c;下载好并解压后 直接…

第二证券:创业板指失守2000点 算力概念股走势活跃

周三&#xff0c;沪深两市继续缩量震动调整&#xff0c;三大指数均小幅下跌&#xff0c;创业板指失守2000点整数关口&#xff0c;再创调整新低。到收盘&#xff0c;上证综指报3108.57点&#xff0c;跌0.52%&#xff1b;深证成指报10072.46点&#xff0c;跌0.53%&#xff1b;创业…

Python机器学习实战-特征重要性分析方法(1):排列重要性(附源码和实现效果)

实现功能 排列重要性 PermutationImportance&#xff1a;该方法会随机排列每个特征的值&#xff0c;然后监控模型性能下降的程度。如果获得了更大的下降意味着特征更重要 实现代码 from sklearn.datasets import load_breast_cancer from sklearn.ensemble import RandomFore…

应用程序处理:TCP模块的处理

1、应用程序处理 首先应用程序会进行编码处理&#xff0c;这些编码相当于 OSI 的表示层功能&#xff1b; 编码转化后&#xff0c;邮件不一定马上被发送出去&#xff0c;这种何时建立通信连接何时发送数据的管理功能&#xff0c;相当于 OSI 的会话层功能。 2、TCP 模块的处理 …

共聚焦显微镜在化学机械抛光课题研究中的应用

两个物体表面相互接触即会产生相互作用力&#xff0c;研究具有相对运动的相互作用表面间的摩擦、润滑与磨损及其三者之间关系即为摩擦学&#xff0c;目前摩擦学已涵盖了化学机械抛光、生物摩擦、流体摩擦等多个细分研究方向&#xff0c;其研究的数值量级也涵盖了亚纳米到百微米…