【问题标题】:Scrapy: Scrape "next" results on a webpage using scrapyScrapy:使用 scrapy 在网页上抓取“下一个”结果
【发布时间】:2018-03-08 11:03:05
【问题描述】:
# -*- 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 url在下面给出 http://www.womenonlyconnected.com/socialengine/pageitems/index

【问题讨论】:

    标签: python web web-scraping scrapy scrapy-spider


    【解决方案1】:

    经过一番调查发现可以使用这个网址进行分页:

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

    其中 N 以 1 开头作为第一页等。所以我会像这样修改你的蜘蛛:

    # -*- 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 页的原因是要确定是否有更多结果以及是否应该转到下一页并不容易。理论上,您可以检查页面上是否存在 View More 元素。问题是它总是存在的,如果没有更多的页面有结果,它就会被隐藏。但是隐藏这个元素是使用 JavaScript 发生的,所以 Scrapy 总是看到它被隐藏了。为了可靠地判断是否有更多页面,您必须使用例如呈现页面Splash.

    【讨论】:

    • @Tomáš Linhart,我也检查过那个网站。这是最后一页http://www.womenonlyconnected.com/socialengine/pageitems/index?page=47
    • @Shahin 这不是真正通用的解决方案,因为添加文章时页数可能会随着时间而变化。真正通用的解决方案涉及使用(无头)浏览器呈现页面,如建议的那样。飞溅。
    猜你喜欢
    • 2018-07-03
    • 2015-12-13
    • 1970-01-01
    • 2013-11-30
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多