Beautifulsoup在具有多个表的页面中抓取特定表

时间:2020-10-28 18:53:31

标签: python web-scraping beautifulsoup

import requests
from bs4 import BeautifulSoup

results = requests.get("https://en.wikipedia.org/wiki/List_of_multiple_Olympic_gold_medalists")

src = results.content

soup = BeautifulSoup(src, 'lxml')

trs = soup.find_all("tr")
for tr in trs:
    print(tr.text)

这是我从“ https://en.wikipedia.org/wiki/List_of_multiple_Olympic_gold_medalists”页面上为抓取表编写的代码

如果仅在“职业生涯中获得最多奥运金牌的名单”会话中定位该表,我该如何指定所需的表?有2个可排序的jquery-tablesorter,因此我无法使用class属性来选择所需的表。

还有一个问题,如果我知道我要抓取的页面包含很多表,而我需要的那个表中总是有10 td个表中的1个row,我可以有类似的东西

If len(td) == 10:
print(tr)

提取我想要的数据

更新代码:

from bs4 import BeautifulSoup

results = requests.get("https://en.wikipedia.org/wiki/List_of_multiple_Olympic_gold_medalists")

src = results.content

soup = BeautifulSoup(src, 'lxml')

tbs = soup.find("tbody")
trs = tbs.find_all("tr")
for tr in trs:
    print(tr.text)

我有一个解决方案,不是一个好的解决方案,只是从页面上提取我需要的第一个表,欢迎提出任何建议/改进!

谢谢。

1 个答案:

答案 0 :(得分:1)

要仅获取第一个表,可以使用CSS选择器nth-of-type(1)

import requests
from bs4 import BeautifulSoup

URL = "https://en.wikipedia.org/wiki/List_of_multiple_Olympic_gold_medalists"

soup = BeautifulSoup(requests.get(URL).content, "html.parser")

table = soup.select_one("table.wikitable:nth-of-type(1)")
trs = table.find_all("tr")

for tr in trs:
    print(tr.text)