11

これは簡単なはずですが、私は立ち往生しています。

<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」であるという事実に基づいて、次のページのリンクを選択したいと思います。何か案は?

4

3 に答える 3

16

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

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

参照: XPath のドキュメントには関数が含まれています


PS。テキストLink Text Nextの最後にスペースがあります。コードにそのスペースを含める必要がないようにするには:

text()="Link Text Next "

containsusingは、十分に具体的でありながら、もう少し一般的だと思います。

于 2012-08-27T15:44:17.407 に答える
6

次の XPath 式を使用できます。

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

これhrefにより、テキスト付きのリンクの属性が選択されます"Link Text Next"

さらに制御が必要な場合は、XPath 文字列関数を参照してください。

于 2012-08-27T15:46:15.673 に答える
1

あなたのxpathは、aタグ内のテキストではなくhrefを選択しています。href にあるようにあなたの例からは見えないnextので、RE では見つけることができません。

于 2012-08-27T15:43:32.503 に答える