【问题标题】:Web scraping multiple tags that have the same class name网页抓取具有相同类名的多个标签
【发布时间】:2021-01-05 03:12:04
【问题描述】:

免责声明 我对 Python 还是很陌生。 我在 bs4 模块中使用 BeautifulSoup 进行网络抓取,我正在查看检查元素,我想打印第二个 <ul> 标记的文本。总共有 4 个<ul>tags,它们都有相同的类名。我将如何打印我想要的标签?还是两三个?

这是我的代码:

from bs4 import BeautifulSoup
from sys import argv

import requests

word_initial = argv[1]

url = requests.get(f'https://www.merriamwebster.com/thesaurus/{word_initial}').text

soup = BeautifulSoup(url, features='html.parser')

word = soup.find('h1', class_='hword')
syn = soup.find("ul", class_='mw-list')

print(word.text.upper())
print(syn.text)

【问题讨论】:

  • 您可以简单地进行索引,例如'//ul[2]' 将为您提供所有 uls 的第二个标签'
  • 所以代码行看起来像这样? word = soup.find("ul[2]", class_='mw-list')
  • 我的错。我以为是xpath;因为 soup.find 返回一个值列表,所以你可以做 word[1] 返回第二个值。
  • 对我来说,soup.find 不返回列表,它只是给我文本
  • 你为什么不试试像soup.find_all('ul',class_="mw-list'")这样的选择器。它将返回 list 并且 list[1] 将返回第二个元素

标签: python web-scraping


【解决方案1】:

您可以检查您的网址 -> https://www.merriam-webster.com/ 而不是 https://www.merriamwebster.com/

示例

from bs4 import BeautifulSoup
from sys import argv    
import requests

word_initial ='test' 

url = requests.get(f'https://www.merriam-webster.com/thesaurus/{word_initial}').text

soup = BeautifulSoup(url, features='html.parser')

word = soup.find('h1', class_='hword')
syn = soup.find("ul", class_='mw-list')

print(word.text.upper())
print(syn.text)

输出

TEST
essay, experiment, experimentation, trial

已编辑

如果你想提取第二个 ul,那么你可能想做.find_all() 而不是.find()

...
syn = soup.find_all("ul", class_="mw-list") # this returns list of values
second_ul = syn[2]
third_ul = syn[3]
print(second_ul.get_text(),third_ul.get_text())
... 

输出:

dry run, shakedown exercise, practice (also practise), rehearsal, tryout, workout

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多