Scrapy Spider-如何获取起始网址并增加页面编号以抓取以页面值结尾的页面?

时间:2019-02-10 20:32:55

标签: python web-scraping scrapy scrapy-spider

我正在尝试抓取this site,并且在此页面底部的数字是33,400,您可以通过response.css('span.pagination__pages :: text')。extract_first()来获取首先将其转换为33400,然后在我的代码中的start_urls中,我要从page = 1递增到page = 33400,并将该值从上面指定的CSS范围中拉出。目前,我下面的代码在寻找下一个页面链接并获得该href,但我在遍历所有33,400页时遇到问题,它仅获得大约100ish的输入并停止。我以为这也许是更好的解决方案,但我需要在如何在代码中编写代码的帮助。

import scrapy

class QuotesSpider(scrapy.Spider):
name = "exampleurls"
allowed_domains = ["example.com"]
start_urls = ["https://www.example.com/search?format=search&page=1&query=&sort=popular&type=vector"]


def parse(self, response):
    # self.log('I just visited: ' + response.url)
    # for quote in response.css('div.showcase__content'):
    #    item = {
    #        'url': quote.css('a::attr(href)').extract_first(),
    #    }
    #    yield item

    urls = response.css('div.showcase__content > a::attr(href)').extract()
    for url in urls:
        url = response.urljoin(url)
        yield scrapy.Request(url=url, callback=self.parse_details)

    # follow pagination link
    next_page_url = response.xpath("//a[contains(concat(' ', @class, ' '), ' pagination__next ')]/@href").extract_first()
    if next_page_url:
        next_page_url = response.urljoin(next_page_url)
        yield scrapy.Request(url=next_page_url, callback=self.parse)

def parse_details(self, response):
    yield {
        'name': response.css('h1.mg-none::text').extract_first(),
        'creation-date': response.xpath('//@data-creation-date').extract_first(),
        'downloads': response.xpath('//@data-downloads').extract_first(),
        'image-small': response.xpath('//@data-image-small').extract_first(),
        'main-keyword': response.xpath('//@data-main-keywords-label').extract_first(),
        'url': response.xpath("//meta[@property='og:url']/@content").extract(),
        'is-premium': response.xpath('//@data-premium').extract_first(),
        'is-selection': response.xpath('//@data-selection').extract_first(),
    }

1 个答案:

答案 0 :(得分:0)

世界!

因此,您希望在一组数字之间进行选择,将它们添加到请求中,以此类推,这应该很容易。

  1. 实现这一目标的快速方法是在“ star_urls”中包含一个范围,以便遍历...
start_urls = ["https://www.example.com/search?format=search&page=%s&query=&sort=popular&type=vector"% page for page in xrange(33400)]

在这种情况下,最好的解决方案是使用具有链接提取器规则集的抓取蜘蛛。