分享免费的编程资源和教程

网站首页 > 技术教程 正文

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

goqiw 2024-09-09 06:39:20 技术教程 12 ℃ 0 评论

行动计划

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

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

总体策略:

  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 并用它做任何你喜欢的事情!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表