所在位置:

用scrapy爬取向下滚动更多内容的网站

今天我们来爬取一个不停向下滚动同时会展示更多内容的网站,这种网站在不停向下滚动的过程中会不停地调用接口,我们可以根据这些接口的规则来获取数据,后面我们也可以使用 Selenium 通过控制浏览器来模拟真实用户的操作以获取数据。

预备工作

  • python2.7.10
  • scrapy 1.4.0
  • virtualenv 15.2.0

创建项目

scrapy startproject scrollqutoes
cd scrollqutoes
scrapy genspider quotescroll quotes.toscrape.com

修改创建的爬虫类

  • 进入到爬虫类的目录
cd scrollquotes/scrollquotes/spiders
  • 修改 quotescroll.py 的内容如下
# -*- coding: utf-8 -*-
import scrapy
import json


class QuotescrollSpider(scrapy.Spider):
    name = 'quotescroll'
    allowed_domains = ['quotes.toscrape.com']
    api_url = 'https://quotes.toscrape.com/api/quotes?page={}'
    start_urls = [api_url.format(1)]

    def parse(self, response):
        data = json.loads(response.text)
        for item in data['quotes']:
            yield {
                'author_name': item['author']['name'],
                'tags': item['tags'],
                'text': item['text']
            }
        if data['has_next']:
            next_page = data['page'] + 1
            yield scrapy.Request(url=self.api_url.format(next_page), callback=self.parse)
  • 上面代码的思路是先读取第一页接口的数据,然后再判断是否有下一页,如果有的话,就一直爬取下一页,直到没有了下一页为止

运行爬虫

scrapy crawl quotescroll -o blog.json

参考链接

【上一篇】极简的端到端 Scrapy 教程(第三部分)【翻译】

【下一篇】 部署scrapy爬虫