我正在尝试抓取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(),
}
答案 0 :(得分:0)
世界!
因此,您希望在一组数字之间进行选择,将它们添加到请求中,以此类推,这应该很容易。
start_urls = ["https://www.example.com/search?format=search&page=%s&query=&sort=popular&type=vector"% page for page in xrange(33400)]
在这种情况下,最好的解决方案是使用具有链接提取器规则集的抓取蜘蛛。