如何抓取我想要的具体数据?

问题描述 投票:0回答:1

我正在尝试数据抓取,但无法获取我想要的特定数据。最终,我想识别在科罗拉多州出生和/或参加高中棒球的所有球员,并将他们的姓名和出生地保存在字典中。我能够识别数据所包含的标签,但我无法成功检索数据。

我广泛研究了抓取,但未能取得太大进展。在我看来,我需要使用 soup.find_all('tag', attrs={}) 来解析我需要的数据,但我很难确定如何用 'attrs' 来识别我想要的数据。如果已经有与此主题相关的帖子,我也很乐意对其进行评论。我无法找到有用的帖子,可能是因为我缺乏技术知识。

如果 B-Ref 主页是 https://www.baseball-reference.com/

谢谢你

#Python program to scrape website

import requests
import html5lib
from bs4 import BeautifulSoup
import csv

URL = 'https://www.baseball-reference.com/players/p/paytoja01.shtml'
r = requests.get(URL)

soup = BeautifulSoup(r.content, 'html5lib')

#print(soup.prettify())

a_tag = soup.find_all('a')

print(a_tag)
#Colorado_Born_and_HS = {}
#Colorado_Born = {}
#Colorado_HS = {}

我尝试了多种方法,包括 soup.find、.find_all、.find_all_next、.next_siblings 等。我没有将所有这些都包含在我的代码示例中,因为它很混乱,我想这个问题有一个相对简单的问题回答。

python parsing web-scraping beautifulsoup
1个回答
0
投票

我在这里找到了您的示例的日期:

#Python program to scrape website

import requests
import html5lib
from bs4 import BeautifulSoup

URL = 'https://www.baseball-reference.com/players/p/paytoja01.shtml'
r = requests.get(URL)

soup = BeautifulSoup(r.content, 'html5lib')

# Using soup
birthday = soup.find('span', id="necro-birth")
print(birthday.text.strip())

# Using plaintext
txt = str(r.content)
born_dirty = txt.split("was born in")[1].split("</a>")[0]
born = born_dirty.split("<")[0] + born_dirty.split(">")[1]
born = born.strip()

print(born)

输出:

November 22, 1972
Zanesville, OH

阅读 URL 指向的页面,我注意到出生日期位于带有 id 的范围内。这是理想的,因为我们可以简单地找到它。

也就是说,我通常不使用 BS4 进行抓取,我只是简单地获取页面文本并将其分割为兴趣点,直到得到我想要的内容。这就是“明文示例”。请注意,我在 URL 指向的页面上按 ctrl+F Ctrl+F 并决定要使用第二个出现的位置,因此我继续执行该操作。如果常见问题解答不是自动生成的,这可能不具有普遍性。

© www.soinside.com 2019 - 2024. All rights reserved.