如何向CSS选择器添加属性以指定特定的分页链接?

时间:2018-06-08 19:04:02

标签: python-3.x web-scraping scrapy

我刚进入Scrapy&我知道这是一个Noob问题,但如何添加一个属性来指定特定的分页链接?

这里是我正在定位的元素的html。

`<div class="pagination">
<a rel="prev" href="/collections/all?page=1" class="fa fa-chevron-left prev pagination-icon"></a>
<ul>
                <li class="pagination-icon">
            <a href="/collections/all?page=1" title="">1</a>
            </li>
                <li class="pagination-icon pagination-icon--current">
            2
            </li>
                <li class="pagination-icon">
            <a href="/collections/all?page=3" title="">3</a>
            </li>
                <li class="pagination-icon">
            <a href="/collections/all?page=4" title="">4</a>
            </li>
                <li class="pagination-icon pagination-icon--current">
            …
            </li>
                <li class="pagination-icon">
            <a href="/collections/all?page=50" title="">50</a>
            </li>
</ul>

我需要按照此行中的链接

<a rel="next" href="/collections/all?page=3" class="fa fa-chevron-right next pagination-icon"></a>

这是我的scrapy代码

            next_page = response.css('div.pagination a::attr(href)').extract_first()
    if next_page is not None:
        yield response.follow(next_page, callback=self.parse)

正在发生的事情是它跟随这个链接而不是另一个链接,因为它是班级中的第一个“分页”

 <a rel="prev" href="/collections/all?page=1" class="fa fa-chevron-left prev pagination-icon"></a>

我可以看到2个链接的属性之间存在2个差异,这两个属性都在“分页”类

  1. Rel属性不同,我需要带有“next”的那个
  2. Class属性不同,我需要“fa fa-chevron-right next pagination-icon”
  3. 我很确定通过在css选择器中指定上面列出的2个属性之一,我可以获得正确的链接。我尝试使用以下CSS选择器但没有工作。

    1. div.pagination a.fa fa-chevron-right next pagination-icon a :: attr(href)不起作用
    2. a.fa fa-chevron-right next pagination-icon a :: attr(href)不起作用
    3. a.fa fa-chevron-right next pagination-icon :: attr(href)不起作用
    4. 我如何实现目标?为什么我尝试的CSS选择器都没有工作?

1 个答案:

答案 0 :(得分:0)

您无法使用单个点选择多个类。要么将每个点都用点组合,要么使用这种语法"[class='fa fa-chevron-right next pagination-icon']"。但是,如果动态生成任何类,则选择器将中断。

然后试着看看会发生什么。

response.css('div.pagination a[rel="next"]::attr(href)').extract_first()