爬虫框架 -->scrapy

scrapy框架

  - 框架 : 具有很多功能,且具有很强通用性的项目模板

  - 环境安装 :

#环境准备
linux 系统 pip3 install scrapy

windows系统
    1 pip3 install wheel
    2 下载 Twisted-19.2.0-cp36-cp36m-win-amd64.whl
    3 进入下载目录,执行 pip3 install Twisted‑19.2.0‑cp36‑cp36m‑win_amd64.whl
    4 pip3 install pywin
    5 pip3 install wheel 

什么是scrapy?

Scrapy 是一个为了爬取网站数据,提取结构性数据编写的应用框架,.非常强大,所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。

scrapy的用法

#创建一个爬虫工程
scrapy startproject projectName

#cd proName

#创建爬虫文件
srcapy genspider first www.xxx.com

#执行工程
scrapy crawl spiderName     #执行对应的爬虫应用
scrapy crawl spiderName --no log   #忽略日志输出

#持久化存储
    # - 基于终端指令 : 只可以将parse方法的返回值存储在磁盘文件中,解析的内容结构必须为字典
    scrapy crawl first -o qiubai.csv   #指定文件类型有要求.json .csv 
    # - 管道 : 

目录结构

#项目结构:

project_name/
   scrapy.cfg:
   project_name/
       __init__.py
       items.py
       pipelines.py
       settings.py
       spiders/
           __init__.py

scrapy.cfg   #项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)
items.py     #设置数据存储模板,用于结构化数据,如:Django的Model
pipelines    #数据持久化处理
settings.py  #配置文件,如:递归的层数、并发数,延迟下载等
spiders      #爬虫目录,如:创建文件,编写爬虫解析规则

 基本写法

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

class FirstSpider(scrapy.Spider):
    #爬虫文件的名称:就是爬虫文件的一个唯一标示
    name = 'first'
    #允许的域名
    # allowed_domains = ['www.xxx.com']   #一般不用
    #起始url列表:列表元素都会被自动的进行请求的发送
    start_urls = ['https://www.qiushibaike.com/text/']

    #解析数据
    def parse(self, response):
        div_list = response.xpath('//div[@id="content-left"]/div')
        names = []
        for div in div_list:
            #特性:xpath返回的列表元素一定是Selector对象,使用extract()就可以获取Selecot中data的数据
            # author = div.xpath('./div[1]/a[2]/h2/text()')[0].extract()
            author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
            #在基于终端指令进行持久化存储的时候必须将解析到的数据封装到字典中
            dic = {
                'name':author
            }
            names.append(dic)
        return names

 setting.py配置

#修改内容及其结果如下:
19行:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' #伪装请求载体身份

22行:ROBOTSTXT_OBEY = False  #可以忽略或者不遵守robots协议

....

猜你喜欢

转载自www.cnblogs.com/CrazySheldon1/p/10818864.html