Python框架值Scrapy的学习

前言

已经很久很久没有写笔记了,这次要打算系统的学习Scrapy框架,因此把笔记做好,以免以后又要重新查文档。

在做这个之前已经把xici代理所有IP+端口下载下来了,但是为了学习这个Scrapy,重新拿那个项目做个例子,有助于学习,也可以对比出普通requests的爬虫和这个Scrapy框架的优缺点。

准备工作

开发环境

  • Python 3.5
  • VSCode + CoderRunner 插件

目前一直使用VSCode作为开发环境,包括笔记的记录,也是使用VSCode来做的,感觉VSCode除了不能对Python的输入进行处理,其他一切都OK。

安装Scrapy

  • python -m pip install scrapy

只需要使用命令行输入以上代码即可,注意环境变量Python的顺序,如果有anaconda更好。

开始项目

创建项目

  • scrapy startproject [project_name] [domain]

使用以上方法可以创建一个基础的爬虫项目

创建爬虫

  • scrapy genspider [spider_name]
  • scrapy genspider -t crawl [project_name] [domain]

需要在项目的最上层目录,即与cfg文件所在的同级目录执行以上命令,使用 -t 可以指定crawl模板。

项目结构

创建完项目大概是这种结构,其他的暂时不用管,先学习爬虫文件的编写,和项目配置文件的修改。

项目配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

第一步,使用代理头,别把别人的反扒当傻子。。。起码代理头要改改。

DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
}

第二步,关闭爬虫(君子)协议,如果遵守君子协议,基本上爬不到什么东西了。

ROBOTSTXT_OBEY = False

第三步,配置延迟,这个网站不延迟会banIP,之前的做法是用他的代理去访问他。 <- 。- >

DOWNLOAD_DELAY = 2

以上配置文件主要是通过配置文件自带的注释进行修改得到,尽量避免自己手写配置文件。

开始编写爬虫

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*- coding: utf-8 -*-
import scrapy

class XicispiderSpider(scrapy.Spider):
name = 'xiciSpider'
allowed_domains = ['xicidaili.com']

def start_requests(self):


for i in range(1,2):
yield scrapy.Request('https://www.xicidaili.com/nn/' + str(i),callback=self.parse)

# 将目标网址加入任务列表,设置回调为parse。
return super().start_requests()

def parse(self, response):
print(response.body)
# 将整个网页的数据输出出来。

运行爬虫

  • scrapy crawl xiciSpider

刚开始,只用一个页面进行测试就可以,不用跑太多页面。

将程序运行起来,运行结果找到IP和端口,不过夹杂在众多HTML标签里面,下面要开始真正的爬虫解析。

正式启动

使用Xpath helper插件

使用该插件可以快速匹配到需要的字段,然后再写代码,提高效率

Xpath 匹配方法