【问题标题】:Scrapy - Select specific link based on textScrapy - 根据文本选择特定链接
【发布时间】:2012-08-22 02:57:30
【问题描述】:

这应该很容易,但我卡住了。

<div class="paginationControl">
  <a href="/en/overview/0-All_manufactures/0-All_models.html?page=2&amp;powerunit=2">Link Text 2</a> | 
  <a href="/en/overview/0-All_manufactures/0-All_models.html?page=3&amp;powerunit=2">Link Text 3</a> | 
  <a href="/en/overview/0-All_manufactures/0-All_models.html?page=4&amp;powerunit=2">Link Text 4</a> | 
  <a href="/en/overview/0-All_manufactures/0-All_models.html?page=5&amp;powerunit=2">Link Text 5</a> |   

<!-- Next page link --> 
  <a href="/en/overview/0-All_manufactures/0-All_models.html?page=2&amp;powerunit=2">Link Text Next ></a>
</div>

我正在尝试使用 Scrapy (Basespider) 根据链接文本选择链接:

nextPage = HtmlXPathSelector(response).select("//div[@class='paginationControl']/a/@href").re("(.+)*?Next")

例如,我想根据文本是“Link Text Next”这一事实来选择下一页链接。有什么想法吗?

【问题讨论】:

    标签: python web-crawler scrapy


    【解决方案1】:

    使用a[contains(text(),'Link Text Next')]:

    nextPage = HtmlXPathSelector(response).select(
        "//div[@class='paginationControl']/a[contains(text(),'Link Text Next')]/@href")
    

    参考:XPath contains 函数的文档


    PS。您的文本Link Text Next 末尾有一个空格。为避免在代码中包含该空格:

    text()="Link Text Next "
    

    我认为使用contains 更通用一些,但仍然足够具体。

    【讨论】:

    • 谢谢大家。我使用了@unutbu 的建议,效果很好。
    • 所以没有 CSS 选择器的方法可以做到这一点?
    【解决方案2】:

    您可以使用以下 XPath 表达式:

    //div[@class='paginationControl']/a[text()="Link Text Next"]/@href
    

    这将选择带有文本"Link Text Next" 的链接的href 属性。

    如果您需要更多控制权,请参阅XPath string functions

    【讨论】:

      【解决方案3】:

      您的 xpath 选择的是 href 而不是 a 标记中的文本。从您的示例中看,它不像 href 中包含 next,因此您无法使用 RE 找到它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多