码迷,mamicode.com
首页 > 其他好文 > 详细

【Scrapy框架的安装和基本用法】 𙦑

时间:2019-08-27 12:19:46      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:response   tin   日志信息   libs   爬取   https   for   nes   tail   

目录

原文: http://blog.gqylpy.com/gqy/361

@(Scrapy框架的安装和基本用法)

什么是Scrapy?


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

开始安装


如果是Windows系统,应按照下面的顺序进行安装:

  1. pip3 install wheel
  2. 打开网址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
    复制搜索:Twisted?18.9.0?cp36?cp36m?win_amd64.whl ,然后下载它
    进入下载目录,执行: pip3 install Twisted-18.9.0-cp36-cp36m-win_amd64.whl
  3. pip3 install pywin32
  4. pip3 install scrapy

构建你的项目


第一步,打开终端,执行 scrapy startproject 项目名称 来构建一个项目(项目生成在当前目录下),项目的目录结构如下:

project_name/  # 是你定义的项目名称
  project_name/  # 是你定义的项目名称
      spiders/  # 用于爬虫文件
          __init\_.py
      __init__.py
      items.py  # 数据结构模板文件
      middlewares.py  # 中间件
      pipelines.py  # 管道文件
      settings.py  # 配置文件(真正配置爬虫的文件)
  scrapy.cfg  # 也是配置文件


第二步,进入上一步骤创建的项目目录(终端),执行 scrapy genspider 应用名称 爬取网页的起始URL 来创建一个爬虫应用程序,创建的爬虫应用程序生成在spiders/目录下:

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


class Test01Spider(scrapy.Spider):

    # 应用名称
    name = 'test01'

    # 指定爬取的域名(如果你写了此属性,则非此域名的URL无法爬取)
    # allowed_domains = ['www.baidu.com']

    # 起始爬取的URL
    start_urls = ['https://www.baidu.com/']
    # 起始爬取的URL有多条时,则会将每条URL的响应数据(response)都调用一遍下面的parse函数


    def parse(self, response):
        """
        访问起始URL并获取结果后的回调函数
        :param response: 向起始的RUL发送请求后,获取的响应对象
        :return: 该方法的返回值必须为 可迭代对象 或 None
        """
        pass


第三步,打开settings.py文件,修改必要配置:

# 第19行,伪装请求载体身份(UA)
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'

# 第22行,是否遵守robots协议
ROBOTSTXT_OBEY = True


第四步,执行爬虫程序,执行方式有如下两种:

  • scrapy crawl 应用名称 这种执行形式会显示执行的日志信息
  • scrapy crawl 应用名称 --nolog 不显示执行的日志

简单使用


爬取你的CSDN博客中所有文章和URL的对应关系


爬虫应用文件内容如下:

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


class Test01Spider(scrapy.Spider):
    name = 'test01'  # 应用名称

    # 允许爬取的域名(如果你指定了此属性,则非此域名的URL无法爬取)
    allowed_domains = ['https://blog.csdn.net']

    path = '/qq_41964425'  # 你的CSDN博客主页路径
    max_page = 7  # 你的CSDN博客中一共有多少页博客

    # 将你的CSDN博客的每一页 都添加到起始爬取的URL中
    start_urls = []
    for i in range(1, max_page + 1):
        start_urls.append(allowed_domains[0] + path + '/article/list/' + str(i))


    def parse(self, response):
        """
        访问起始URL并获取结果后的回调函数
        :param response: 向起始的RUL发送请求后,获取的响应对象
        :return: 该方法的返回值必须为 可迭代对象 或 None
        """

        # 定位你的每篇博文的div
        div_list = response.xpath('//div[@class="article-item-box csdn-tracking-statistics"]')  # type:list
        # xpath为response中的方法,可以将xpath表达式直接作用于该函数中

        # 每个人的博客,每一页都有这篇文章,你打开源码看看就知道了
        div_list.pop(0)  # 帝都的凛冬 https://blog.csdn.net/yoyo_liyy/article/details/82762601

        # 开始处理解析到的数据
        content_list = []
        for div in div_list:
            # xpath函数返回的为列表,列表中存放的数据为Selector类型的数据
            # xpath解析到的内容被封装到了Selector对象中,需要调用extract()函数将解析到的内容从Selector中取出
            title = div.xpath('.//h4/a/text()')[-1].extract().strip()  # 获取博文标题
            url = div.xpath('.//h4/a/@href').extract_first().strip()  # 获取博文URL
            # extract():解析指定的元素,也可以解析列表中的所有元素  extract_first():取出列表中的第一个元素并进行操作

            # 保存内容(注意格式)
            content_list.append({'title': title, 'url': url})

        return content_list


跑起来:
运行此命令 scrapy crawl test01 --nolog -o text.csv 将进行持久化存储,-o 指定保存的文件(注意文件的格式,建议使用 .csv

补充:Response对象的方法


技术图片

原文: http://blog.gqylpy.com/gqy/361

【Scrapy框架的安装和基本用法】 𙦑

标签:response   tin   日志信息   libs   爬取   https   for   nes   tail   

原文地址:https://www.cnblogs.com/ggg566/p/11417457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!