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

目录

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.hqwc.cn/news/108181.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

langchain主要模块(四):Memory

langchain2之Memory langchain1.概念2.主要模块模型输入/输出 (Model I/O)数据连接 (Data connection)链式组装 (Chains)代理 (Agents)内存 (Memory)回调 (Callbacks) 3.MemoryConversationBufferMemoryConversationBufferWindowMemoryConversationTokenBufferMemoryConversati…

【物联网】简要解释RTK(Real-Time Kinematic)>>实时动态差分定位

引言&#xff1a; RTK&#xff08;Real-Time Kinematic&#xff09;技术是一种基于差分GPS的高精度定位技术&#xff0c;它通过实时通信和数据处理&#xff0c;能够提供厘米级甚至亚米级的定位精度。RTK技术在许多领域都得到了广泛应用&#xff0c;如测绘、航空航天、农业等。本…

GPT 内部 — I : 了解文本生成

年轻的陀思妥耶夫斯基被介绍给生成AI&#xff0c;通过Midjourney创建 一、说明 我经常与不同领域的同事互动&#xff0c;我喜欢向几乎没有数据科学背景的人传达机器学习概念的挑战。在这里&#xff0c;我试图用简单的术语解释 GPT 是如何连接的&#xff0c;只是这次是书面形式。…

LeetCode(力扣)53. 最大子数组和Python

LeetCode53. 最大子数组和 题目链接代码 题目链接 https://leetcode.cn/problems/maximum-subarray/ 代码 class Solution:def maxSubArray(self, nums: List[int]) -> int:result float(-inf)count 0for i in range(len(nums)):count nums[i]if count > result:res…

CSS:屏幕正中间有个元素A,元素A中有文字A,随着屏幕宽度的增加

始终需要满足以下条件&#xff1a; A元素垂直居中于屏幕***&#xff1b;A元素距离屏幕左右边距各10px&#xff1b;A元素里面的文字”A”的font-size:20px&#xff1b;水平垂直居中;A元素的高度始终是A元素宽度的50%; (如果搞不定可以实现为A元素的高度固定为200px;)请用 html及…

Spring系列文章:Spring中的设计模式

一、简单⼯⼚模式 BeanFactory的getBean()⽅法&#xff0c;通过唯⼀标识来获取Bean对象。是典型的简单⼯⼚模式&#xff08;静态⼯⼚模 式&#xff09;&#xff1b; 二、⼯⼚⽅法模式 FactoryBean是典型的⼯⼚⽅法模式。在配置⽂件中通过factory-method属性来指定⼯⼚⽅法&a…

使用html展示中秋节快乐的脚本

#【中秋征文】程序人生&#xff0c;中秋共享# html代码如下所示&#xff1a; <!DOCTYPE html> <html> <head> <title>中秋节</title> <style> body { font-family: Arial, sans-serif; margin: 0; padding: 20px; } h1 { c…

魔众携手ModStart上线全新模块市场,支持模板主题

ModStart模板主题 对于很多新手或者是缺乏经验的开发者来说&#xff0c;快速建站具有一定的难度&#xff0c;总是一件让人头疼的问题。 ModStart为开发者提供了一些模板主题供开发者选购使用&#xff0c;模块市场包含了丰富的模块&#xff0c;后台一键快速安装&#xff0c;让开…

连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。

连nil切片和空切片一不一样都不清楚&#xff1f;那BAT面试官只好让你回去等通知了。 问题 package mainimport ("fmt""reflect""unsafe" )func main() {var s1 []ints2 : make([]int,0)s4 : make([]int,0)fmt.Printf("s1 pointer:%v, s2 p…

【javaSE】 枚举与枚举的使用

文章目录 &#x1f384;枚举的背景及定义⚾枚举特性总结&#xff1a; &#x1f332;枚举的使用&#x1f6a9;switch语句&#x1f6a9;常用方法&#x1f4cc;示例一&#x1f4cc;示例二 &#x1f38d;枚举优点缺点&#x1f334;枚举和反射&#x1f6a9;枚举是否可以通过反射&…

【LeetCode-简单题】844. 比较含退格的字符串

文章目录 题目方法一&#xff1a;单指针方法二&#xff1a;双指针方法三&#xff1a;栈 题目 方法一&#xff1a;单指针 首先每次进入循环处理之前需要对第一个字符进行判断&#xff0c;若是退格符&#xff0c;直接删掉&#xff0c;结束此次循环fast从0开始&#xff0c;如果fa…

JSON注解和异常处理的使用

一、JSON数据返回 1.1.前言 JSON是一种轻量级的数据交换格式&#xff0c;易于阅读和编写&#xff0c;同时也易于机器解析和生成。JSON的常用场景包括&#xff1a; 前后端分离的项目中&#xff0c;后端向前端传送数据时 。 Ajax异步访问数据。RPC远程调用。 除了JSON&#x…