【问题标题】:Trouble getting rid of duplicate links摆脱重复链接的麻烦
【发布时间】:2017-05-13 21:29:53
【问题描述】:

尝试了许多不同的链接,但每次我得到相同的结果:第一个链接总是再次出现在最后一个。

import requests
from lxml import html
Unique=[]
url="https://www.yellowpages.com/search?search_terms=coffee&geo_location_terms=Los+Angeles%2C+CA"
def DupRemoval(Address):
    MainLink="https://www.yellowpages.com"
    response = requests.get(Address)
    Unique.append(Address)
    tree=html.fromstring(response.text)
    Pagination_link=tree.xpath("//div[@class='pagination']//a/@href")
    for Nextpage in Pagination_link:
        Blink=MainLink+Nextpage
        if Blink not in Unique:
            print(Blink)

DupRemoval(url)

制作链接:

【问题讨论】:

  • 您是否考虑过使用允许重复的集合而不是列表?
  • 是的,cricket_007 先生,一开始就尝试过,但没有运气。
  • 那么 URL 字符串中的某些内容必须不同

标签: python web-scraping duplicates web-crawler


【解决方案1】:

重复链接是“下一个”链接按钮,它是分页块中的最后一个。此外,如果您继续前进到下一页,您还将在那里获得“上一页”链接。

一种快速过滤掉它的方法是获取所有没有class 属性的a 元素:

//div[@class='pagination']//a[not(@class)]/@href

【讨论】:

  • 感谢 alecxe 先生,一如既往地为您提供有效的解决方案。你是编码的向导。顺便说一句,您认为我上面粘贴的代码除了 xpath 之外还可以吗?再次感谢。
  • @SMth80 谢谢!有些事情我会在那里改进 - 考虑将其发布到 Code Review site - 获得工作代码反馈的好方法。
  • 先生要知道的一件事,关于 xpath 表达式。前几天你教我在类元素之间包含空格时编写 xpath。这次我尝试了这样,但不幸的是它抛出了错误。我不明白我在这里是否犯了任何错误。如果你看看这个,我会很高兴的。再次感谢alecxe先生。 "//div[@class='pagination']//a[contains(concat(' ', @cla‌​ss, ' '), ' next ')]/@hr‌​ef"
  • @SMth80 当然,您的表达式实际上看起来不错 - 它与“下一个”链接的 href 值匹配。请注意,当我复制粘贴它时,那里有一些未打印的符号 - 试试这个://div[@class='pagination']//a[contains(concat(' ', @class, ' '), ' next ')]/@href。谢谢。
  • @SMth80 这正是重点——您在视觉上看不到区别,但在@class 内部的a 和@href 内部的r 之后有未打印的字符。当我将您的表达式粘贴到 $x() 函数中以测试 XPath 时,我在 chrome 控制台中看到了这一点。希望对您有所帮助。
猜你喜欢
  • 2021-11-26
  • 2019-03-25
  • 2012-12-16
  • 1970-01-01
  • 2017-10-03
  • 2017-07-09
  • 2023-03-09
  • 2017-01-11
  • 1970-01-01
相关资源
最近更新 更多