繁体   English   中英

Scrapy:使用scrapy在网页上抓取“下一个”结果

[英]Scrapy: Scrape “next” results on a webpage using scrapy

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request

class InfoSpider(scrapy.Spider):

    name = 'info'
    allowed_domains = ['womenonlyconnected.com']
    start_urls =['http://www.womenonlyconnected.com/socialengine/pageitems/index']

    def parse(self, response):
        urls =  response.xpath('//h3/a/@href').extract()
        for url in urls:
            absolute_url = response.urljoin(url)
            yield Request(absolute_url , callback = self.parse_page)



    def parse_page(self , response):
        pass

这是我使用此代码的代码,我只能抓取前24个链接,仅在页面上的“查看更多”之后在抓取所有链接时需要帮助pag网址位于http://www.womenonlyconnected.com/socialengine/pageitems/index下

经过一些调查,可以发现您可以使用以下URL进行分页:

http://www.womenonlyconnected.com/socialengine/pageitems/index?page=N

其中N以1开头的第一页等。因此,我将像这样修改您的Spider:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request

class InfoSpider(scrapy.Spider):

    name = 'info'
    allowed_domains = ['womenonlyconnected.com']
    start_urls = ['http://www.womenonlyconnected.com/socialengine/pageitems/index']
    page_num = 1

    def parse(self, response):
        urls =  response.xpath('//h3/a/@href').extract()
        for url in urls:
            absolute_url = response.urljoin(url)
            yield Request(absolute_url , callback = self.parse_page)

        if self.page_num < 100:
            self.page_num += 1
            yield Request(start_urls[0] + '?page={}'.format(self.page_num) , callback = self.parse)

    def parse_page(self , response):
        pass

我之所以停在第100页,是因为要确定是否还有更多结果并不容易,因此您是否应该转到下一页。 从理论上讲,您可以检查页面上是否存在“ 查看更多”元素。 问题是它总是存在,如果没有更多结果页,它就会被隐藏。 但是隐藏此元素是使用JavaScript进行的,因此Scrapy始终会看到它是隐藏的。 为了可靠地判断是否还有更多页面,您必须使用例如Splash渲染页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM