【问题标题】:How do I get multiple identical href links from identical elements如何从相同元素中获取多个相同的 href 链接
【发布时间】:2020-03-06 01:31:17
【问题描述】:

我正在抓取有关健身课程的数据并将其写入 csv 文件。在网页上,我试图抓取班级名称、描述、地址、联系电话、网站和社交链接。我正在使用BeautifulSoupSelenium

这里是页面链接:https://classpass.com/classes/stretch-london-ada-street/strong-flow-yoga/322325148#tabs?search-id=40447186987779531

元素如下所示:

<a class="_2MTzNd_HEKWjVL824SA9Li" href="https://instagram.com/stretch_london" 

对于所有不同的社交都是相同的,唯一的区别是元素中的 url。

我已经能够使用下面的方法从页面中获取我想要的其他非 href 数据,即类名、描述等并写入 csv:

        try:
            class_name = classses_soup.find('span', {'data-component': 'LocalizableMessage'}).text
        except (AttributeError, TypeError,) as e:
            pass

但是我无法获得 href 链接,我想是因为它们都是相同的元素吗?因此,例如,下面的代码不起作用 - 下面的摘录是针对 instagram 链接的,但我对 facebook 和 twitter 有相同的代码行:

try:
    instagram = classses_soup.find('a', {'class': '_2MTzNd_HEKWjVL824SA9Li'}).a.href
except (AttributeError, TypeError, IndexError,) as e:
    pass

它给出了以下错误:

NameError: name "class_wesbite" is not defined

我做错了什么,如何让我的代码抓取每个链接,以便我可以像处理其他元素一样写入 csv?

【问题讨论】:

    标签: selenium selenium-webdriver web-scraping beautifulsoup


    【解决方案1】:

    您好,下面的代码会根据您的页面获取社交媒体链接:-

    import requests
    from bs4 import BeautifulSoup
    from functools import partial  
    from operator import is_not
    
    links = []
    filter_null = partial(filter, partial(is_not, None))
    
    url = "https://classpass.com/classes/stretch-london-ada-street/strong-flow-yoga/322325148#tabs?search-id=40447186987779531"  # no trailing /
    try:
        page = requests.get(url)
    
        soup = BeautifulSoup(page.text, 'html.parser')
    
        last_links = soup.find("div", {"id": "find-us-social-links"})
    
        artist_name_list_items = last_links.find_all('a')
        for artist_name in artist_name_list_items:
    
            links.append(artist_name.get('href'))
            L =list(filter_null(links))
        print(links)
    except Exception as e:
        print(e)
        print("continuing....")
    

    【讨论】:

    • 你能快速解释一下吗?
    • 确定诀窍实际上是在进入正确的 HTML 元素后找到链接。例如,在这种情况下,“find-us-social-links”是存储网络链接的 div 的 id
    • ? 还有一个善意的建议:你对优秀的代码有很大帮助。如果您总是添加一些简短的解释,我认为您的答案会更有价值。
    • 谢谢 :) 并且一定会尝试添加更多解释的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 2018-01-28
    • 1970-01-01
    • 2020-02-05
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多