虫虫我的程序员分身

Scrapy框架之一个小项目带你上路

2019-02-27  本文已影响1人  不存在的一角

前言

上一篇章讲解了如何新建一个 Scrapy 项目,带大家了解了 Scrapy 框架的基本结构,还没了解的各位可以看这里
Scrapy框架之新建Scrapy项目详解

这篇主要讲解 Scrapy 框架中的一些基本配置,以及通过一个爬虫来进一步的了解 Scrapy 的工作原理

顺便提一下,这次爬取的是维基百科上的各国演员姓名,而爬取维基百科的首要条件就是需要翻墙,没有购买VPS的小伙伴该怎么办呢?

由于审核问题...如何免费翻墙请关注公众号后,在后台回复大写【FQ】

正文

先来接着看看 settings.py 中常用的配置
BOT_NAME

ROBOTSTXT_OBEY

CONCURRENT_REQUESTS

DEFAULT_REQUEST_HEADERS

DEPTH_LIMIT

DOWNLOAD_DELAY

`DOWNLOAD_DELAY = 0.25 # 250 ms of delay`

DOWNLOAD_TIMEOUT

ITEM_PIPELINES

USER_AGENT

PROXIES: 代理设置

COOKIES_ENABLED = False

除了这些配置参数, settings.py 中还有很多参数可以配置,也可以在其中自己定义数据库的配置连接参数

接下来就是开始我们的爬虫案例的第一部分

我们从这个各国演员分类开始
https://zh.wikipedia.org/wiki/Category:%E5%90%84%E5%9C%8B%E6%BC%94%E5%93%A1

而对应的在爬虫文件中,我们把 allowed_domains 换成了维基百科的域名,这样爬虫运行时就不会采集其他域名链接的内容

这里我们不用原来的start_urls,而是重写了一个start_requests方法,在方法中定义开始爬取的链接等等,然后调用scrapy.Request来发送请求,请求中的几个参数,简单地讲,url就是请求的链接, callback就是回调到parse这个方法,然后可以打印输出,meta可以传递参数,这里是为了添加本地的代理(添加代理后才可以正常访问到维基百科)

# -*- coding: utf-8 -*-
import scrapy


class FirstSpider(scrapy.Spider):
    name = 'first'
    allowed_domains = ['wikipedia.org']

    def start_requests(self):
        start_urls = 'https://zh.wikipedia.org/wiki/Category:%E5%90%84%E5%9C%8B%E6%BC%94%E5%93%A1'
        yield scrapy.Request(url=start_urls, callback=self.parse, meta={'proxy': 'http://localhost:1080'})

    def parse(self, response):
        print(response.text)

那么我们现在就来运行看看,到底能不能获取返回的响应,在这里如何运行一个 Scrapy 项目呢?

第一种方法:命令行运行

首先打开命令行,进入到你的项目文件夹下,注意,一定要是进入你的项目文件夹,否则命令找不到你的爬虫文件,就没有办法执行

接着输入命令,我这里依旧是python3 -m,不多提了,需要注意的是,我这里的 first 就是 name = 'first',中的 name的值,是你自己定义的爬虫的名称,输完命令后回车即可

scrapy crawl first

这就是我们得到响应的html源码

第二种方法:pycharm中的终端执行

打开 pycharm 找到左下角的 Terminal ,或者点击在菜单栏中找

2019-02-27_222432.png

同样我们需要进入到项目的文件夹下

然后运行

当然有人会问这前面一大堆的加载的信息是什么?这些其实是项目运行时读取的配置信息,在后续也会讲到

第三种方法:代码运行

每次都要输一遍命令来执行吗,有点麻烦啊......那么你可以试试,加入这些代码,来让执行变得更加自动化

# -*- coding: utf-8 -*-
import scrapy
# 导入这俩
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings


class FirstSpider(scrapy.Spider):
    name = 'first'
    allowed_domains = ['wikipedia.org']

    def start_requests(self):
        start_urls = 'https://zh.wikipedia.org/wiki/Category:%E5%90%84%E5%9C%8B%E6%BC%94%E5%93%A1'
        yield scrapy.Request(url=start_urls, callback=self.parse, meta={'proxy': 'http://localhost:1080'})

    def parse(self, response):
        print(response.text)

# 从这里开始执行,其它不用变动
if __name__ == "__main__":
    process = CrawlerProcess(get_project_settings())
    process.crawl('first')
    process.start()

这样就可以直接右键运行了,怎么样,是不是变得简单了点!

要是执行了命令,却怎么也获取不到响应呢?别急,好好看看,有没有在设置中禁用机器人协议!

ROBOTSTXT_OBEY = False

以上就是今天的内容,后续会接着以这个项目为例来一起学习 Scrapy!


print('微信公众号搜索 "猿狮的单身日常" ,Java技术升级、虫师修炼,我们 不见不散!')
print('也可以扫下方二维码哦~')
猿狮的单身日常
上一篇 下一篇

猜你喜欢

热点阅读