2021/5/29爬虫第十八次课(Scrapy框架上)

文章目录

  • 一、scrapy概述
  • 二、scrapy的工作流程
  • 三、Scrapy快速入门

一、scrapy概述

1 为什么学习Scrapy?

爬虫必备的技术 面试…
让我们的爬虫更快更强大
2 什么是Scrapy?

异步爬虫框架

3 Scrapy它有什么优势?

可配置和可扩展性非常高
Scrapy框架是基于异步 Twisted异步网络框架 (复杂 闭包)
4 如何学习?

  • 参考官方文档
  • csdn

二、scrapy的工作流程

2021/5/29爬虫第十八次课(Scrapy框架上)_第1张图片

  • 引擎
  • 爬虫程序 (D:\python_spider\scrapy快框架\myspider\myspider\spiders\douban.py)
  • 调度器
  • 下载器
  • 爬虫、下载中间件 (middlewares.py)
  • 管道 (piplines.py)

建立爬虫项目时,还有一同创建的:

  • items.py (提前进行数据封装)
  • settings.py (设置配置项)

**常用的:
1.爬虫程序
2.settings.py
包含:

  • “君子协议”
  • 默认并发量为16
  • 下载延迟
  • 请求报头
  • 爬虫、下载中间件
  • 管道

3.piplines.py**

具体解释:
1 引擎:整个框架的核心
2 调度器:接收从引擎发过来的url,入列
3 项目管道:数据处理(存储数据) (编写逻辑)
4 爬虫文件:整个爬虫的解析处理 (编写逻辑)
5 下载器:发请求获响应
6 下载中间件 处理引擎和下载器之间的请求与响应(用的是比较多的) (编写逻辑)
7 爬虫中间件处理爬虫程序的响应和输出结果以及新的请求

三、Scrapy快速入门

目标url:https://www.douban.com/
爬取的内容 标题
​
第一步 先创建scrapy项目 (dos命令行 pycharm终端)
首先要cd到目标文件夹下
scrapy startproject mySpider(scrapy项目的名称)
​
第二步 创建爬虫程序
baidu.com  douban.com
scrapy genspider demo "demo.cn" (demo是你爬虫的名字 demo.cn 爬取的范围/域名)
​
第三步 运行scrapy的命令
1 在终端 scrapy crawl 爬虫名字(demo)
2 可以运行py文件
我们先创建一个py文件(在项目下)
from scrapy import cmdline
cmdline.execute('scrapy crawl demo'.split())
cmdline.execute(['scrapy','crawl','demo'])

具体细节:

1.
报错在spider opened到 spider finished间查找
在settings.py内 LOG_LEVEL='WARNING'
2.
# response为我们封装了一些方法 xpath css 在获得selector对象的时候
# 如果要获得这个对象当中的文本数据
# 旧方法
# extract_first() 返回一条数据
# extract() 返回多条数据
# 新方法
# get()返回一条数据
# getall() 返回多条数据

注:***“不想当架构师的程序员,不是好程序员!”***
scrapy安装依赖别的库
用scrapy:

  1. ROBOTSTXT_OBEY = False
  2. UA
  3. LOG_LEVEL=‘WARNING’

附:爬虫程序:

import scrapy
from scrapy.http.response.html import HtmlResponse  #response对象封装了xpath

class DoubanSpider(scrapy.Spider):
    name = 'douban'
    allowed_domains = ['douban.com']
    start_urls = ['http://douban.com/']

    def parse(self, response):
        # print('* '*20)
        # print(response)
        # print(type(response))
        # print('* '*20)
        li_list=response.xpath('//div[@class="side-links nav-anon"]/ul/li')
        # dict1={}
        for i in li_list:
            dict1 = {
     }
            dict1['name'] = i.xpath('a/em/text()').get()
            if dict1['name']==None:
                dict1['name']=i.xpath('a/text()').get()
            print(dict1)

你可能感兴趣的:(scrapy)