首页 > 编程问答 >如何在网站上抓取多个需要订购的值

如何在网站上抓取多个需要订购的值

时间:2024-08-03 17:32:09浏览次数:7  
标签:python web-scraping beautifulsoup

我正在尝试使用 beautifulsoup 抓取 NHL 比赛的结果,但我无法弄清楚如何获取比赛进行的日期以及按顺序排列的结果。比赛日期位于标签下,结果位于“field-content”类中。目前,我可以找到这两个值并将它们放置在自变量中,但我想保留它们在原始网站中出现的顺序并将数据放置在单个变量中。

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen("https://www.jatkoaika.com/nhl/ottelut").read()

soup = bs.BeautifulSoup(sauce, features="html.parser")

dates = str(soup.find_all("h3"))
dates = dates.replace("<h3>", "").replace("</h3>", "")

games = str(soup.find_all("span", {"class": "field-content"}))
games = games.replace('<span class="field-content">', "").replace("</span>", "")

可以遍历所有日期标题,并为每个标题查找下一个同级“field-content”跨度,以保持顺序并将数据存储在单个变量中。

以下是修改后的代码:

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen("https://www.jatkoaika.com/nhl/ottelut").read()
soup = bs.BeautifulSoup(sauce, features="html.parser")

results = []
for date_header in soup.find_all("h3"):
  date = date_header.text.strip()
  game_result = date_header.find_next_sibling("span", {"class": "field-content"}).text.strip()
  results.append((date, game_result))

# 打印结果
for date, result in results:
  print(f"{date}: {result}")

解释:

  1. 迭代日期标题: 我们首先使用 soup.find_all("h3") 找到所有日期标题 (h3 标签)。
  2. 查找下一个同级: 对于每个日期标题,我们使用 find_next_sibling() 方法查找具有类名“field-content”的下一个同级跨度标签。这确保我们获取与该日期对应的比赛结果。
  3. 提取文本: 我们使用 .text.strip() 从日期标题和游戏结果跨度中提取文本内容。
  4. 存储在列表中: 我们将日期和结果存储在一个元组中,然后将该元组附加到 results 列表中。
  5. 打印结果: 最后,我们遍历 results 列表并打印每个日期和相应的比赛结果。

此代码将按原始网站上显示的顺序为提供日期和比赛结果的列表。

标签:python,web-scraping,beautifulsoup
From: 58693944

相关文章

  • Python+Pycharm下载安装教程,基础知识(详细教程)
    这是一篇针对初学者的 Python 基础教程,只要你认真阅读,花费30分钟即可快速了解Python。这篇Python入门教程讲解的知识点包括:Python编程环境的搭建、Python基本操作入门、Python数据类型、Python语句和函数。Python环境下载和配置根据Windows版本(64位/32位)从P......
  • 在Python中发出警告而不中断程序
    我试图在Python中发出警告,而不会使程序崩溃/停止/中断。我使用以下简单函数来检查用户是否向其传递了非零数字。如果是这样,程序应该警告他们,但继续正常进行。它应该像下面的代码一样工作,但应该使用类Warning()、Error()或Exception()而不是手动......
  • Python中动态类和动态方法的创建与调用
    借助于python的动态语言特性,很容易对对象进行添加方法或者属性,这也是python的灵活之一。动态生成类的属性及其方法在某些情况可能要根据不同的参数来动态生成不同的实例方法、静态方法、类方法。下面的例子中则展示了如何动态地向类中添加属性和方法。importtypesclassPers......
  • Python学习中最常见的10个列表操作问题
    列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,这篇文章列出了10个常用的列表操作,希望对你有帮助。1、迭代列表时如何访问列表下标索引普通版:items=[8,23,45]forindexinrange(len(items)):print(index,"-->",items[index])​......
  • Python中定义(创建)、调用函数及返回值
    1.定义(创建)函数要调用一个函数,首先要定义它。在Python中使用关键字def来定义一个函数。函数通常由函数名、参数列表以及一系列语句组成的函数体构成的。函数定义的一般格式如下:def函数名(参数列表):函数体例如:defsayhello(): print('hello')最简单的函数:defm......
  • python用List的内建函数list.sort进行排序
    对List进行排序,Python提供了两个方法方法1用List的内建函数listsort进行排序listsort(func=None,key=None,reverse=False)Python实对List进行排序,Python提供了两个方法方法1.用List的内建函数list.sort进行排序list.sort(func=None,key=None,reverse=False)>>>list=......
  • 禁用 GIL 的 Python 3.13 非常慢
    我对python3.12.0与使用3.13.0b3标志编译的python--disable-gil进行了简单的性能测试。该程序使用ThreadPoolExecutor或ProcessPoolExecutor执行斐波那契数列的计算。引入禁用GIL的PEP文档表示,存在一些开销,主要是由于有偏差......
  • 有没有办法阻止 setUp() 为 python 测试用例中的每个测试方法启动浏览器?
    我正在练习编写Web自动化测试用例,并且编写了一些函数来测试登录、在用户主页中查找我的用户名以及测试GitHub的注销功能。然而,我通过经验和阅读了解到setUp()是在每个测试方法之前启动的,而我的问题是在每个测试方法之前它都会打开一个新的浏览器。我希望我的所有测......
  • 尝试使用Python抓取需要先登录的网站但没有成功
    我正在尝试抓取一个需要登录的网站(我的路由器GUI),但无论我做了什么,我都会反复返回登录站点的源代码,而不是成功登录后出现的页面。我做了一些阅读,并意识到我需要返回POST请求的答案。我想我找到了它们并返回了所需的值,但仍然-似乎没有任何效果。我使用https://curl.tri......
  • 给python初学者的一些建议
    写在开篇关于Python,可以这么说,这几年借着数据科学、机器学习与人工智能的东风,Python老树开新花,在风口浪尖上居高不下。Python之所以这么受大家的青睐,是因为它语言简洁,上手容易,让非计算机专业的人员也能快速上手,享受编程开发带来的便利和福利。但Python再简单,它也是一......