2012-08-27 26 views
8

Điều này sẽ dễ dàng nhưng tôi bị kẹt.Phế liệu - Chọn liên kết cụ thể dựa trên văn bản

<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> 

Tôi đang cố gắng sử dụng Scrapy (Basespider) để chọn liên kết dựa trên đó là liên kết văn bản sử dụng:

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

Ví dụ, tôi muốn chọn liên kết trang tiếp theo dựa trên thực tế rằng văn bản của nó là "Liên kết văn bản tiếp theo". Bất kỳ ý tưởng?

Trả lời

14

Sử dụng a[contains(text(),'Link Text Next')]:

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

tham khảo: Tài liệu về XPath contains chức năng


PS. Văn bản Link Text Next của bạn có một khoảng trống ở cuối. Để tránh phải bao gồm không gian mà trong các mã:

text()="Link Text Next " 

Tôi nghĩ rằng sử dụng contains là một chút tổng quát hơn trong khi vẫn đủ cụ thể.

+0

Xin cảm ơn các bạn. Tôi đã sử dụng đề xuất của @unutbu và nó hoạt động hoàn hảo. –

+0

Vì vậy, không có cách chọn CSS nào để thực hiện việc này? – deostroll

1

Xpath của bạn đang chọn href không phải là văn bản trong thẻ a. Nó không nhìn từ ví dụ của bạn giống như href có next trong đó, vì vậy bạn không thể tìm thấy nó với RE.

4

Bạn có thể sử dụng các biểu thức XPath sau:

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

này chọn href thuộc tính của liên kết với văn bản "Link Text Next".

Xem XPath string functions nếu bạn cần kiểm soát nhiều hơn.

Các vấn đề liên quan