百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

使用 Python 在 5 分钟内抓取网站数据

myzbx 2024-12-13 15:06 12 浏览

行动计划

在制作我的表情机器人时,我遇到了一个很大的不便——没有公开的表情数据库! 在找了几个小时之后,我决定是时候采取主动并自己制作了。

附: 如果你碰巧找到了一个文字表情数据库,请告诉我(这样我就可以嘲笑自己浪费了多少时间)。

总体策略:

  1. 使用 BeautifulSoup 制作解析器
  2. 使此解析器避免验证码和 HTTP 错误 403
  3. 找到所有包含表情符号的容器
  4. 根据情绪将它们放入一维数组中(一个代表快乐,一个代表愤怒等等)
  5. 将我们所有的数组组合成一个 Pandas 数据框
  6. 没有剧透,但我对生成的数据框看起来多么不寻常感到非常惊讶:)


第 1 步 — 获取网站和库

表情符号以字符串形式出现,因此从 HTML 代码中检索它们应该相对容易。

这个网站有一个小技巧:

如您所见,网站每个部分的 URL 都会有所不同。 这没问题,只是需要注意的一些事情,并且会在我们的抓取过程中增加一些工作。

让我们导入库:

from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as soup

现在让我们创建请求。 这将打开网页并检查其内容。 您可以放置任何您想要的浏览器,我选择了 Mozilla,因为它似乎造成的麻烦最少(澄清一下,我使用 Chrome 作为浏览器来抓取,您不需要输入实际浏览器的名称!)

url = "https://www.emoticonstext.com/flip-table.html"

req = Request(url, headers = {'User-Agent': 'Mozilla/5.0'})

webpage = urlopen(req).read()

好的,解析器时间!

page_soup = soup(webpage, 'html.parser')


第 2 步 — 检索数据

以下是该过程背后的逻辑:

  1. 我们获取 url 并设置我们的解析器
  2. 解析器将寻找一个特定的容器(在我们的例子中是 span 容器)
  3. 我们将收集到的数据放入一维数组中
  4. 我们确保数组的长度相同(这将有助于我们稍后创建数据框)

这有点拗口,让我们开始吧!

首先,获取 url 并设置解析器:

def makeArray(url):
  url_add = url
  req = Request(url_add, headers = {'User-Agent': 'Mozilla/5.0'})
  webpage = urlopen(req).read()
  page_soup = soup(webpage, 'html.parser')
  containers = page_soup.findAll("span", "emoticon")
  arr_name = []
  for i in containers:
    arr_name.append(i)
  return arr_name

很好,我们为网站的 1 个部分返回了一个数组。 我将使用这个函数制作 7 个不同的数组——每种情绪 1 个。 尽管这看起来又长又难,但它只是对每种情感的前两行代码的重复!

#create the 'laughing' array
laughing_arr = makeArray("https://www.emoticonstext.com/laughing.html")
#print its length (it was 29 values long
print(len(laughing_arr))

#create the 'surprised' array
surprised_arr = makeArray("https://www.emoticonstext.com/surprised.html")
#get its length (its 45)
print(len(surprised_arr))
#trim it down to make it 29
del surprised_arr[29:45]

###### REPEAT! ######

thinking_arr = makeArray("https://www.emoticonstext.com/thinking.html")
print(len(thinking_arr))
del thinking_arr[29:43]

confused_arr = makeArray("https://www.emoticonstext.com/confused.html")
print(len(confused_arr))
del confused_arr[29:38]

depressed_arr = makeArray("https://www.emoticonstext.com/depressed.html")
print(len(depressed_arr))
del depressed_arr[29:49]

helpless_arr = makeArray("https://www.emoticonstext.com/helpless.html")
print(len(helpless_arr))
del helpless_arr[29:35]

scared_arr = makeArray("https://www.emoticonstext.com/scared.html")
print(len(scared_arr))
del scared_arr[29:46]

恭喜,你刚刚制作了很多一维数组!


第三步——制作数据框

制作数据框所需要做的就是将我们的数组作为列添加到其中。 我们将使用 Pandas 创建我们的数据框。

import pandas as pd
df = pd.DataFrame()

df['happy'] = list(laughing_arr)
df['surprised'] = list(surprised_arr)
df['thinking'] = list(thinking_arr)
df['confused'] = list(confused_arr)
df['depressed'] = list(depressed_arr)
df['helpless'] = list(helpless_arr)
df['scared'] = list(scared_arr)

df.head(29)

好吧,让我们看看我们辛勤工作的成果:

你现在可以在这个数据框上使用 Pandas 并用它做任何你喜欢的事情!

相关推荐

Django零基础速成指南:快速打造带用户系统的博客平台

#python##服务器##API##编程##学习#不是所有教程都值得你花时间!这篇实战指南将用5分钟带你解锁Django核心技能,手把手教你从零搭建一个具备用户注册登录、文章管理功能的完整...

iOS 17.0 Bootstrap 1.2.9 半越狱来啦!更新两点

这款Bootstrap半越狱工具终于更新,离上一次更新已相隔很久,现在推出1.2.9版本,主要为内置两点功能进行更新,也是提升半越狱的稳定性。如果你正在使用这款半越狱工具的,建议你更新。注意!...

iOS 16.x Bootstrap 1.2.3 发布,支持运行清理工具

本文主要讲Bootstrap半越狱工具更新相关内容。如果你是iOS16.0至16.6.1和17.0系统的,想体验半越狱的果粉,请继续往下看。--知识点科普--Bootstrap...

SpringBoot整合工作流引擎Acticiti系统,适用于ERP、OA系统

今日推荐:SpringBoot整合工作流引擎Acticiti的源码推荐理由:1、SpringBoot整合工作流引擎Acticiti系统2、实现了三级权限结构3、持久层使用了mybatis框架4、流程包...

SpringCloud自定义Bootstrap配置指南

在SpringCloud中自定义Bootstrap配置需要以下步骤,以确保在应用启动的早期阶段加载自定义配置:1.添加依赖(针对新版本SpringCloud)从SpringCloud2020...

Python使用Dash开发网页应用(三)(python网页开发教程)

PlotlyDash开发Web应用示例一个好的网页设计通常都需要编写css甚至js来定制前端内容,例如非常流行的bootstrap框架。我们既然想使用Dash来搭建web应用,很大的一个原因是不熟悉...

Oxygen XML Editor 27.1 中的新功能

OxygenXMLEditor27.1版是面向内容作者、开发者、合作者和出版商的行业领先工具包的增量版本。在27.1版本中,AIPositronAssistant得到了增强,包括用于...

【LLM-多模态】Mini-Gemini:挖掘多模态视觉语言模型的潜力

一、结论写在前面论文提出了Mini-Gemini,一个精简而强大的多模态VLM框架。Mini-Gemini的本质在于通过战略性框架设计、丰富的数据质量和扩展的功能范围,发掘VLM的潜在能力。其核心是补...

谐云课堂 | 一文详解分布式改造理论与实战

01微服务与分布式什么是分布式?首先,我们对上图提到的部分关键词进行讲解。单体,是指一个进程完成全部的后端处理;水平拆分,是同一个后端多环境部署,他们都处理相同的内容,使用反向代理来均衡负载,这种也叫...

基于Abaqus的手动挡换挡机构可靠性仿真

手动挡,也称手动变速器,英文全称为Manualtransmission,简称MT,即用手拨动换挡操纵总成才能改变变速器内的齿轮啮合位置,改变传动比,从而达到变速的目的。家用轿车主要采用软轴连接的换挡...

【pytorch】目标检测:彻底搞懂YOLOv5详解

YOLOv5是GlennJocher等人研发,它是Ultralytics公司的开源项目。YOLOv5根据参数量分为了n、s、m、l、x五种类型,其参数量依次上升,当然了其效果也是越来越好。从2020...

超实用!50个非常实用的PS快捷键命令大全分享

今天,给大家介绍50个非常实用的快捷键命令大全,大家伙都是设计师,关于软件使用那是越快越好啊。一、常用的热键组合1、图层混合模式快捷键:正常(Shift+Option+N),正片叠底(Shif...

Pohtoshop中深藏不露的小技巧(科目一考试技巧记忆口诀看完必过)

邢帅教育ps教程为大家总结了一些Pohtoshop中深藏不露的小技巧,可以帮助到大家在设计时减少不必要的麻烦,提高工作效率哦~~~1.设置网格线保持像素完美不在1:1分辨率下也能保持像素完美,可以...

Ganglia监控安装总结(监控安装工作总结)

一、ganglia简介:Ganglia是一个跨平台可扩展的,高性能计算系统下的分布式监控系统,如集群和网格。它是基于分层设计,它使用广泛的技术,如XML数据代表,便携数据传输,RRDtool用于数据...

谁说Adobe XD做不出好看的设计?那是你没搞懂这些功能

AdobeXD的美化栏具有将设计视图美化的功能,它能使界面设计和原型设计更漂亮、更吸引眼球。美化栏的7个功能包括竖线布局设计、横线布局设计、重复网格、图形大小和位置设置、响应式调整大小、文字美化以及...