当前位置: 首页 > news >正文

python实现简单的爬虫功能

前言

Python是一种广泛应用于爬虫的高级编程语言,它提供了许多强大的库和框架,可以轻松地创建自己的爬虫程序。在本文中,我们将介绍如何使用Python实现简单的爬虫功能,并提供相关的代码实例。

如何实现简单的爬虫

1. 导入必要的库和模块

在编写Python爬虫时,我们需要使用许多库和模块,其中最重要的是requests和BeautifulSoup。Requests库可以帮助我们发送HTTP请求,并从网站上获取数据,而BeautifulSoup可以帮助我们从HTML文件中提取所需的信息。因此,我们需要首先导入这两个库。

import requests
from bs4 import BeautifulSoup

2. 发送HTTP请求

在爬虫程序中,我们需要向网站发送HTTP请求,通常使用GET方法。Requests库提供了一个get()函数,我们可以使用它来获取网站的HTML文件。这个函数需要一个网站的URL作为参数,并返回一个包含HTML文件的响应对象。我们可以使用text属性来访问HTML文件的文本内容。

url = "https://www.example.com"
response = requests.get(url)
html = response.text

在发送HTTP请求时,我们需要注意是否需要添加用户代理和头信息。有些网站会检查用户代理和头信息,如果没有正确的值,它们就会拒绝我们的请求。为了避免这种情况,我们可以在HTTP请求中添加用户代理和头信息。我们可以使用requests库的headers选项来添加头信息。

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}response = requests.get(url, headers=headers)

3. 解析HTML文件

在获取了网站的HTML文件之后,我们需要从中提取我们想要的信息。为此,我们需要使用BeautifulSoup库,它提供了许多强大的函数和方法,可以轻松地解析HTML文件。

我们可以使用BeautifulSoup函数将HTML文件转换为BeautifulSoup对象。然后,我们可以使用find()、find_all()等方法来查找HTML文件中的元素。这些方法需要一个标签名称作为参数,并返回一个包含所选元素的列表或单个元素。

soup = BeautifulSoup(html, "html.parser")
title = soup.find("title").text

为了从HTML文件中提取更多的信息,我们需要了解CSS选择器。CSS选择器是一种用于选择HTML元素的语法,类似于CSS中的样式选择器。我们可以使用CSS选择器来获取HTML文件中特定元素的信息。例如,我们可以使用select()方法和一个CSS选择器来选择一个类别的所有元素。

items = soup.select(".item")
for item in items:title = item.select(".title")[0].textprice = item.select(".price")[0].text

4. 存储数据

在爬取数据后,我们可能需要将数据存储到本地文件或数据库中。Python提供了许多方式来实现这一点,例如使用CSV、JSON或SQLite等格式来存储数据。

如果我们要将数据保存到CSV文件中,我们可以使用csv库。这个库提供了一个writer()函数,我们可以使用它来创建一个CSV写入器。然后,我们可以使用writerow()方法向CSV文件中写入数据。

import csvwith open("data.csv", "w", newline="") as file:writer = csv.writer(file)writer.writerow(["Title", "Price"])for item in items:title = item.select(".title")[0].textprice = item.select(".price")[0].textwriter.writerow([title, price])

如果我们要将数据保存到SQLite数据库中,我们可以使用sqlite3库。这个库提供了一个链接到数据库的函数connect()和一个游标对象,我们可以使用它来执行SQL查询。

import sqlite3conn = sqlite3.connect("data.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE items (title TEXT, price TEXT)")for item in items:title = item.select(".title")[0].textprice = item.select(".price")[0].textcursor.execute("INSERT INTO items VALUES (?, ?)", (title, price))conn.commit()
conn.close()

完整的代码示例:

import requests
from bs4 import BeautifulSoup
import csv
import sqlite3def get_data():url = "https://www.example.com"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}response = requests.get(url, headers=headers)html = response.textsoup = BeautifulSoup(html, "html.parser")title = soup.find("title").textitems = soup.select(".item")data = []for item in items:title = item.select(".title")[0].textprice = item.select(".price")[0].textdata.append((title, price))return title, datadef save_csv(title, data):with open("data.csv", "w", newline="") as file:writer = csv.writer(file)writer.writerow(["Title", "Price"])for item in data:writer.writerow(item)def save_sqlite(title, data):conn = sqlite3.connect("data.db")cursor = conn.cursor()cursor.execute("CREATE TABLE items (title TEXT, price TEXT)")for item in data:cursor.execute("INSERT INTO items VALUES (?, ?)", item)conn.commit()conn.close()title, data = get_data()
save_csv(title, data)
save_sqlite(title, data)

总结

本文介绍了如何使用Python实现简单的爬虫功能,并提供了相关的代码示例。使用这些代码,您可以轻松地从网站上获取所需的数据,并将它们存储到本地文件或数据库中。在编写爬虫程序时,请务必尊重网站的使用规则,并避免过度频繁地发出HTTP请求,以避免对网站造成不必要的负担。

相关文章:

python实现简单的爬虫功能

前言 Python是一种广泛应用于爬虫的高级编程语言,它提供了许多强大的库和框架,可以轻松地创建自己的爬虫程序。在本文中,我们将介绍如何使用Python实现简单的爬虫功能,并提供相关的代码实例。 如何实现简单的爬虫 1. 导入必要的…...

AI文档识别技术之表格识别 (一)

AI文档识别技术之表格识别(一) 文章目录 文章目录 AI文档识别技术之表格识别(一)1. 表格识别原理介绍1.1 表格类型分类1.2 识别原理 2. 整体识别流程2.1 流程图2.2 图像处理部分大致流程 3. 将表格转换为html与json格式输出3.1 html格式3.2 json格式3.3 表格识别实例 前言 此文…...

uni-app 支持 app端, h5端,微信小程序端 图片转换文件格式 和 base64

uni-app 支持 app端 h5端,微信小程序端 图片转换文件格式 和 base64,下方是插件市场的地址app端 h5端,微信小程序端 图片转换文件格式 和 base64 - DCloud 插件市场 https://ext.dcloud.net.cn/plugin?id13926...

云计算——存储虚拟化简介 与 存储模式及方法

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前期回顾 前言 一.存储虚拟化介绍 1.云计算存储基本概念 2.云计算存储模型 3.创…...

数据资产目录建设之数据分类全解

01 数据治理“洗澡论” 其实他们之前做过数据一轮数据资产盘点,做了一个分类,也挂到系统上了,但是后来就没有后来了。治理做一半,等于啥也没干。 我之前在群里开了一个玩笑,数据治理这种事情,就跟洗澡一…...

大模型的数据隐私问题有解了,浙江大学提出联邦大语言模型

作者 | 小戏、Python 理想化的 Learning 的理论方法作用于现实世界总会面临着诸多挑战,从模型部署到模型压缩,从数据的可获取性到数据的隐私问题。而面对着公共领域数据的稀缺性以及私有领域的数据隐私问题,联邦学习(Federated Le…...

flask-sqlalchemy使用

# sqlalchemy 集成到flask中 # 第三方: flask-sqlalchemy 封装了用起来,更简洁 安装 pip install flask-sqlalchemy 使用 # 使用flask-sqlalchemy集成1 导入 from flask_sqlalchemy import SQLAlchemy2 实例化得到对象db SQLAlchemy()3 将db注册到app中db.in…...

flask处理token的装饰器

以下是在 Flask 中基于 token 实现的登录验证装饰器的示例代码: import jwt from functools import wraps from flask import request, jsonify, current_appdef login_required(f):wraps(f)def decorated_function(*args, **kwargs):token request.headers.get(A…...

【Express.js】页面渲染

页面渲染 常见的页面分为两种,一种是静态页面,比如用 Vue、React 等写好的静态页面,另一种是动态模板页面,如 Thymeleaf,JSP 等。 本节将简要介绍如何在 express 中渲染静态页面,以及适用于 express 的模…...

2.UE数字人语音交互(UE数字人系统教程)

上一篇:1.Fay-UE5数字人工程导入 2.UE数字人语音交互(UE数字人系统教程) 1、启动ue数字人 2、下载Fay数字人控制器 Fay数字人控制器下载地址 3、依照说明配置运行Fay 4、启动Fay控制器 5、切换到UE界面开始说话 6、完成了&#xf…...

C语言——水仙花数字

//水仙花数字 //每个数位上的数字的 3次幂之和等于它本身 //列如&#xff1a;1531^35^33^3 #include<stdio.h> int main() {int i,x,y,z;for(i100;i<1000;i){xi%10;yi/10%10;zi/100%10;if(i(x*x*xy*y*yz*z*z))printf("%d\n",i);}return 0; } //输出100-1000…...

java中list对象拷贝至新的list对象并保持两个对象独立的方法

在Java中&#xff0c;如果你想拷贝一个List对象到一个新的List对象&#xff0c;并且修改原来的List不影响新的List中的内容&#xff0c;有几种方法可以实现&#xff1a;使用构造函数&#xff1a; 可以使用List的构造函数&#xff0c;传递原始List作为参数来创建一个新的List对象…...

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容 前言前提条件相关介绍Lama Cleaner环境要求安装Lama Cleaner启动Lama CleanerCPU方式启动GPU方式启动 使用Lama Cleaner测试结果NO.1 检测框NO.2 水印NO.3 广州塔NO.4 人物背景 参考 前言 由于本人水平有限&…...

瑞数系列及顶像二次验证LOGS

瑞数商标局药监局专利局及顶像二次验证 日期&#xff1a;20230808 瑞数信息安全是一个专注于信息安全领域的公司&#xff0c;致力于为企业和个人提供全面的信息安全解决方案。他们的主要业务包括网络安全、数据安全、应用安全、云安全等方面的服务和产品。瑞数信息安全拥有一支…...

Anaconda版本和Python版本对应关系(持续更新...)

简介 Anaconda是包管理工具,是专注于数据分析的Python发行版本&#xff0c;其包含Python和许多常用软件包&#xff0c;不同的Anaconda版本里面也配备了不同的Python版本&#xff0c;并且Python的出现时间比Anaconda早很多&#xff1b;相对而言&#xff0c;python原生的pip安装方…...

vscode 搭建STM32开发环境

1.需要软件 1.1 vscode 1.2 STM32CubeMX&#xff0c;这个不是必须的&#xff0c;我是为了方便生成STM32代码 2.vscode配置 2.1安装keil Assistant 2.2配置keil Assistant 3.STMCUBE生成个STM32代码 &#xff0c;如果有自己的代码可以忽略 4.代码添加到vscode&#xff0c;并…...

6款好用的思维导图在线制作网站盘点,拒绝低效、探索创意!

思维导图以其直观、系统的特性&#xff0c;成为了我们理清思路、整理信息的强大助手。利用好思维导图&#xff0c;我们可以更好地理解信息、链接概念&#xff0c;进一步提高我们的学习和工作效率。 在众多制作思维导图的软件中&#xff0c;在线思维导图制作网站更是因其…...

js的Promise

目录 异步任务回调地域Promise Promise的三种状态resolve传入值 Promise的实例方法thenthen的返回值返回Promise的状态 catchcatch的返回值 finally Promise的类方法resolverejectallallSettledraceany 异步任务 在js中&#xff0c;有些任务并不是立即执行的&#xff0c;如set…...

2.4g无线芯片G350规格书详细介绍

G350是一款高度集成的2.4GHz无线收发芯片&#xff0c;旨在为各种应用提供低成本、高性能的无线通信解决方案。该芯片通过降低功耗&#xff0c;在保持寄存器值条件下&#xff0c;实现最低电流为5μA&#xff0c;从而显著提高了电池寿命。它内置了发射接收FIFO寄存器&#xff0c;…...

React中使用mobx管理状态数据使用样例

MobX 是一个身经百战的库&#xff0c;它通过运用透明的函数式响应编程&#xff08;Transparent Functional Reactive Programming&#xff0c;TFRP&#xff09;使状态管理变得简单和可扩展。官网地址&#xff1a;关于 MobX | MobX中文文档 | MobX中文网 安装依赖 mobx-react-…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...