当前位置: 首页 > 知识库问答 >
问题:

捕获多个相同标签的更好方法?

潘秦斩
2023-03-14

我正在尝试创建一个刮取下载链接的刮取器,我想使用regex但这对我来说将是一个噩梦,我找到了这个名为BeautifulSoup的库,我正在尝试捕获div class=“article-content”的子级中的URL,它是

标记,这个

是URL的名称,我不想将所有URL组合在一个列表中,而是使用了dictionary,它是key是名称(

)和value是URL的列表,这里的讨论已经足够了。

import requests
from bs4 import BeautifulSoup

def scrape():
    resp = requests.get('https://www.animeout.xyz/love-live-nijigasaki-gakuen-school-idol-doukoukai-1080p-300mb720p-150mbepisode-1/')
    soup = BeautifulSoup(resp.text,'html.parser')
    contents = soup.find('div',class_='article-content')
    output = {}
    for tag in contents.children:
        if tag.name == 'h3':
            name = tag.text
            links = []
            for sibling in tag.next_siblings:
                if sibling.name == 'p':
                    for link in sibling.find_all('a',text='Direct Download'):
                        links.append(link.get('href'))
                if sibling.name == 'h3':
                    output.update({name:links})
                    break

到目前为止,我只捕获了1个密钥,有没有一个pythonic的方法来实现这一点?

共有1个答案

燕雨石
2023-03-14

您可能要尝试以下操作:

import json

import requests
from bs4 import BeautifulSoup


def scrape(source_url):
    soup = BeautifulSoup(
        requests.get(source_url).text,
        'html.parser',
    ).find_all(lambda t: t.name == "a" and "Direct" in t.text)

    return {idx: a["href"] for idx, a in enumerate(soup, start=1)}


data = scrape("https://www.animeout.xyz/love-live-nijigasaki-gakuen-school-idol-doukoukai-1080p-300mb720p-150mbepisode-1/")

print(json.dumps(data, indent=2))

您只有一个键的原因是键必须是唯一的,但链接的名称不是唯一的。用一些独特的东西来改变它,例如,索引号。

示例输出:

  "1": "http://nimbus.animeout.com/series/00RAPIDBOT/Love Live Nijigasaki Gakuen School Idol Doukoukai/[AnimeOut] Love Live Nijigasaki Gakuen School Idol Doukoukai - 01 [1080pp][1080pp][Erai-raws][RapidBot].mkv",
  "2": "http://nimbus.animeout.com/series/00RAPIDBOT/Love Live Nijigasaki Gakuen School Idol Doukoukai/[AnimeOut] Love Live Nijigasaki Gakuen School Idol Doukoukai - 01 [v2][1080pp][1080pp][Erai-raws][RapidBot].mkv",
  "3": "http://nimbus.animeout.com/series/00RAPIDBOT/Love Live Nijigasaki Gakuen School Idol Doukoukai/[AnimeOut] Love Live Nijigasaki Gakuen School Idol Doukoukai - 01 [1080pp][1080pp][Erai-raws][RapidBot].mkv",
  "4": "http://nimbus.animeout.com/series/00RAPIDBOT/Love Live Nijigasaki Gakuen School Idol Doukoukai/[AnimeOut] Love Live Nijigasaki Gakuen School Idol Doukoukai - 02 [1080pp][1080pp][Erai-raws][RapidBot].mkv",
  "5": "http://nimbus.animeout.com/series/00RAPIDBOT/Love Live Nijigasaki Gakuen School Idol Doukoukai/[AnimeOut] Love Live Nijigasaki Gakuen School Idol Doukoukai - 03 [v0][1080pp][1080pp][Erai-raws][RapidBot].mkv",

and so on ...
 类似资料:
  • 问题内容: 给定上面的xml文件,我将如何检索标签内所有标签的列表?我想获取“名称”的所有值以及标签之间的数字值。像这样: 问题是我不知道会有多少个附加标签。可能没有,也可能有20。我需要某种方法来对它们全部进行计数,然后删除信息。 问题答案: 这是一个使用JDK执行查询的示例。它假定变量包含您的XML文档。

  • 问题内容: 我遇到一个问题,当执行两个表的联接时,无法确定mysql查找具有两个特定“标签”和相同“ hashid”的链接 假设我的表看起来像这样: 链接 标签 我想返回同时具有“有用”和“很棒”标签的行 当前(工作/快速)查询,用于按1个标签查找链接: 阅读文章后,我尝试使用以下内容: 这 不 工作,但它是如此令人难以置信的缓慢,因为无法使用。 有人知道解决方案吗? 问题答案: 问题的类型称为

  • 我的项目中有两个按钮都有一个“”标签。当调用actionPerformed()方法时,它会根据标签调用特定的方法。如何区分两个标签相同的JButtons?有没有比我已经做到的更好的方法? 这是按钮的定义: 为按钮添加ActionListeners: 操作执行@Override后端:

  • 问题内容: 此代码完美地工作。方法test()适用于两个接口。幕后到底发生了什么?在实际情况下,此功能有何用处? 问题答案: 因为它是一个接口,所以不会造成任何危害。通过实现和,您基本上是在为您的课程使用蓝图。双方并说,应实施一个名为方法 您的类实现了该方法,因此接口已完成其工作。 基本上,您的班级在说:“哦,我需要因为接口而实现”,然后您就实现了。然后您的班级说:“哦,嘿,由于接口我需要再次实现

  • 问题内容: 您能否获得2个具有相同基础类型的单例实例? 在春季,这显然是微不足道的,因为它基于您将范围附加到其上的命名实例,但是我看不到关于将类型绑定到实现类的指南。请注意,由于有问题的实例通过guice注入了其他依赖项,因此我不想绑定到该实例。 问题答案: Guice也很容易!创建两个招标注解,说和,然后 然后

  • 我想点击类id为clsArrowClick的锚标记,并且相同的id在另一个锚标记上。 我尝试了list、wait方法和simple way方法,但我的程序在线程“main”org.openqa.selenium.ElementNotVisibleException中抛出了一个错误异常 就像 //WebDriverWait wait=new WebDriverWait(驱动程序,30);//wait