【问题标题】:How to distinguish two elements with the same class name如何区分具有相同类名的两个元素
【发布时间】:2018-12-28 22:24:38
【问题描述】:

我尝试在我的代码中定位a.nostyle,但是当我这样做时,它有时会抓取上面的电子邮件,因为它们共享相同的标签。我似乎找不到电话号码独有的任何标签。你会怎么做呢?

见下图。任何帮助将不胜感激。

【问题讨论】:

    标签: python web web-scraping beautifulsoup css-selectors


    【解决方案1】:

    你可以试试

    a.nostyle:not([itemprop])
    

    更新

    BeautifulSoup 似乎不支持:not() 语法,您可以尝试解决方法

    link = [link for link in soup.select('a.nostyle') if 'itemprop' not in link.attrs][0]
    

    选择具有所需class 属性但不包含itemprop 属性的链接(如email 链接)

    【讨论】:

    • @Someone...你能详细说明“不起作用”吗?你得到了两个链接还是没有?
    • 我没有得到任何链接@Andersson
    • @Someone... 你能分享代码吗?你是如何使用那个选择器的
    • @Andresson target = html.select("a.nostyle:not([itemprop])") --> 然后遍历网站上的所有元素,我将分配变量 number = target[i ].getText() ||||||导致索引错误 - 索引超出范围
    • 如果我尝试打印上述目标数组,它会返回一个空数组
    【解决方案2】:

    您可以创建一个包含所有“a”标签的列表。然后您可以使用索引号定位所需的标签

    例子

    allATagContainer = soup.findAll("a")
    

    然后你可以使用 allATagContainer[1] 来定位第二个标签。

    【讨论】:

    • HTML 可能包含(也可能包含)两个以上的链接,而且这个数字可能是动态的,因此按索引定位链接不是一个好主意
    • 你是对的,我更喜欢你的回答,但抓取是一项肮脏的业务,我一直处于这样的情况,除了循环遍历标签列表以获得所需的项目外,我无能为力。
    猜你喜欢
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2019-10-15
    相关资源
    最近更新 更多