scrapy学习之爬虫练习平台爬取

本文章首发于个人博客,链接为:https://blog.d77.xyz/archives/35dbd7c9.html

前言

为了练习 Scrapy,找了一个爬虫练习平台,网址为:https://scrape.center/,目前爬取了前十个比较简单的网站,在此感谢平台作者提供的练习平台。

环境搭建

开始爬取前,首先要先把环境搭建起来,Pycharm 新建项目 learnscrapy 和对应的虚拟环境,安装好 Scrapy 和 PyMysql,执行 scrapy startproject learnscrapy 新建一个 scrapy 项目,搭建环境的具体步骤就不详细说了,项目也开源到了 Github 上,地址在这

开始前的准备

由于新建好的项目都是默认设置,所以在开始分析对应网站之前先进行一番设置,方便后边的爬取。

设置robots规则

settings.py 文件中将 ROBOTSTXT_OBEY 的值改为 False。这个其实在目前来说不需要设置,因为目标网站并不存在 robot 文件,但是为了莫名其妙的防止少抓数据,还是养成习惯吧。

设置日志等级

默认日志等级是 DEBUG,会将所有的请求及状态打印出来,大规模爬取时日志很多且很乱,将下列设置添加到 settings.py 文件中过滤掉一部分日志。

import logging
LOG_LEVEL = logging.INFO
设置下载延迟

为了不对目标网站造成太大影响, 稍微降低下下载延迟,默认的下载延迟是 0,将 DOWNLOAD_DELAY 取消注释并且设置为 0.1。

关掉Telnet控制台

目前基本用过不到它,还是关了吧。将 TELNETCONSOLE_ENABLED 的值设置为 False

更改默认的请求头

为了让我们的请求更像正常请求,所以需要设置下默认的请求头,防止被 ban。

DEFAULT_REQUEST_HEADERS = {
   'Accept': 'text/html,application/xhtml+xml,application/xml,application/json;q=0.9,*/*;q=0.8',
                           'accept-encoding': 'gzip, deflate, br',
                           'accept-language': 'zh-CN,zh;q=0.9',
                           'cache-control': 'no-cache',
                           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, '
                                         'like Gecko) Chrome/86.0.4240.75 Safari/537.36'
                           }

管道和中间件用到的时候再开启吧,准备工作到此就结束了。

数据库

准备好一个 MySQL 的 docker 容器,设置好数据库的账号和密码,并且新建一个名为 test 的数据库,运行项目根目录中的 test.sql 文件,会生成三个表,下边爬取时会用到。

开始爬取

ssr1

ssr1 说明如下:

ssr1:电影数据网站,无反爬,数据通过服务端渲染,适合基本爬虫练习。

由于是服务端渲染,那么数据肯定存在于 HTML 源码中,直接从源码中抓数据即可。

在 spiders 文件夹中新建一个ssr1.py 文件,写入以下代码:

import scrapy


class SSR1(scrapy.Spider):
    name = 'ssr1'

    def start_requests(self):
        urls = [
            f'https://ssr1.scrape.center/page/{a}' for a in range(1, 11)
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response, **kwargs):
        pass

这两个方法是我们需要实现的,start_requests 方法中存储了起始 URL,通过 yield 将请求发送给下载器,通过默认的 parse 方法处理返回的数据。

在解析数据前,还有几件事需要做,设置采集数据的字段,开启 item 管道,指定数据由谁来处理,并且将修改后的设置写入到 setting.py 文件中。

  1. 需要新建需要采集的数据所拥有的字段,在 items.py 文件中添加以下内容:
class SSR1ScrapyItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值