scrapy异步的爬虫框架简单的使用

时间:2023-12-30 15:32:56

scrapy异步的爬虫框架

异步的爬虫框架

  • 高性能的数据解析,持久化存储,全栈数据的爬取,中间件,分布式

  • 框架:就是一个集成好了各种功能且具有很强通用性的一个项目模板。

  • 环境安装:

    Linux:

  pip3 install scrapy

  Windows:

  1. pip3 install wheel

  2. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

  3. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl

  4. pip3 install pywin32

  5. pip3 install scrapy
  • 基本使用

  • 新建一个工程:

    前提需要将Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl这个文件放在项目目录下

    # 在终端中执行下面这个命令
    scrapy startporject + “项目名”
    • settings.py:当前工程的配置文件
    • spiders:爬虫包,必须要存放一个或者多个爬虫文件(.py)
  • 进入项目

    # 在终端中执行
    cd + 项目名
  • 创建一个爬虫文件:

    # 在终端中执行:
    scrapy genspider spiderName www.xxx.com # 命令解析:
    scrapy genspider 爬虫文件名 url
    # 这个url是必写的,不写无法创建文件,可以随意些,最后在文件中修改

    scrapy异步的爬虫框架简单的使用

  • 执行工程:

    # 在终端中执行下面的命令:
    scrapy crawl spiderName # 执行命令scrapy crawl 加爬虫文件名
  • sttings文件中需要配置的:

    settings.py:
    
    - 不遵从robots协议
    如果选择不遵循robots协议的就修改文件中的
    ROBOTSTXT_OBEY = False # 将True改为False - UA伪装
    将UA伪装的数据加载文件中 - 指定日志输出的类型:
    将 LOG_LEVEL = 'ERROR' 添加到配置文件中
  • 爬虫文件中:

    # -*- coding: utf-8 -*-
    import scrapy class SecondSpidersSpider(scrapy.Spider):
    name = 'second_spiders'
    #允许的域名
    allowed_domains = ['www.123.com'] #起始的url列表:列表元素只可以是url
    #作用:列表元素表示的url就会被进行请求发送
    start_urls = ['http://duanziwang.com/category/%E7%BB%8F%E5%85%B8%E6%AE%B5%E5%AD%90/'] def parse(self, response):
    all_data = []
    article_list = response.xpath('/html/body/section/div/div/main/article')
    for article in article_list:
    # xpath在进行数据提取时,返回的不再是字符串而是一个Selector对象,想要的数据被包含在了该对象的data参数中 title = article.xpath('./div[1]/h1/a/text()').extract_first()
    content = article.xpath('./div[2]//text()').extract()
    content = ''.join(content)
    dic = {
    'title': title,
    'content': content
    }
    all_data.append(dic)
    return all_data # 将解析到的数据进行了返回
  • 数据解析:

    • 1.response.xpath('xpath表达式')
    • 2.scrapy中的xpath解析,在进行数据提取的时候,xpath方法返回的列表中存储的不再是字符串,

      而是存储的Selector对象,相关的字符串数据是存储在Selector对象的data参数中,我们必须使用

      extract()/extract_first()进行字符串数据的提取
    • extract():可以作用到列表中的每一个列表元素中,返回的依然是一个列表
    • extract_first():只可以作用到列表中的第一个列表元素中,返回的是字符串
  • 持久化存储

    • 基于终端指令的持久化存储
      • 只可以将parse方法的返回值存储到指定后缀的文本文件中。
      • scrapy crawl spiderName -o ./duanzi.csv
    • 基于管道的持久化存储