Scrapy框架-基础

scrapy初识

  • 什么是框架?
    • 所谓的框架简单通用解释就是就是一个具有很强通用性并且集成了很多功能的项目模板,该模板可被应用在不同的项目需求中。也可被视为是一个项目的半成品。
  • 如何学习框架?
    • 对于刚接触编程或者初级程序员来讲,对于一个新的框架,只需要掌握该框架的作用及其各个功能的使用和应用即可,对于框架的底层实现和原理,在逐步进阶的过程中在慢慢深入即可。
  • 什么是scrapy?
    • Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。其内部已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。

scrapy基本使用

  • 环境安装:
    • linux和mac操作系统:
      • pip install scrapy
    • windows系统:
      • pip install wheel
      • 下载twisted,下载地址为http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
      • 安装twisted:pip install Twisted‑17.1.0‑cp36‑cp36m‑win_amd64.whl
      • pip install pywin32
      • pip install scrapy
        测试:在终端里录入scrapy指令,没有报错即表示安装成功!
  • scrapy使用流程:
    • 创建工程:
      • scrapy startproject ProName
    • 进入工程目录:
      • cd ProName
    • 创建爬虫文件:
      • scrapy genspider spiderName www.xxx.com
    • 编写相关操作代码
    • 执行工程:
      • scrapy crawl spiderName
  • 爬虫文件剖析:
# -*- coding: utf-8 -*-
import scrapy
classQiubaiSpider(scrapy.Spider):
  name ='qiubai'#应用名称
  #允许爬取的域名(如果遇到非该域名的url则爬取不到数据)
  allowed_domains =['https://www.qiushibaike.com/']
  #起始爬取的url
  start_urls =['https://www.qiushibaike.com/']
  #访问起始URL并获取结果后的回调函数,该函数的response参数就是向起始的url发送请求后,获取的响应对象.该函数返回值必须为可迭代对象或者NUll
def parse(self, response):
  print(response.text)#获取字符串类型的响应内容
  print(response.body)#获取字节类型的相应内容

  response的属性:

url :HTTP响应的url地址,str类型

status:HTTP响应的状态码, int类型

headers :HTTP响应的头部, 类字典类型, 可以调用get或者getlist方法对其进行访问

body:HTTP响应正文, bytes类型

text:文本形式的HTTP响应正文, str类型

response.text = response.body.decode(response.encoding)

encoding:HTTP响应正文的编码

reqeust:产生该HTTP响应的Reqeust对象

meta:即response.request.meta, 在构造Request对象时, 可将要传递给响应处理函数的信息通过meta参数传入, 响应处理函数处理响应时, 通过response.meta将信息提取出来

selector:Selector对象用于在Response中提取数据使用下面详细将,主要是 xpath,css取值之后的处理

xpath(query):下面详细讲解

css(query) :下面详细讲解

urljoin(url) :用于构造绝对url, 当传入的url参数是一个相对地址时, 根据response.url计算出相应的绝对url.

  • 配置文件settings.py修改:

    1. #修改内容及其结果如下:
      #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协议
      LOG_LEVEL=False 或者 scrapy crawl spiderName --nolog
  • scrapy基于xpath数据解析操作:

爬取糗事百科的段子数据

# -*- coding: utf-8 -*-
import scrapy
classQiubaiSpider(scrapy.Spider):
  name ='qiubai'
  allowed_domains =['https://www.qiushibaike.com/']
  start_urls =['https://www.qiushibaike.com/']
def parse(self, response):   #xpath为response中的方法,可以将xpath表达式直接作用于该函数中   odiv = response.xpath('//div[@id="content-left"]/div')   content_list =[]#用于存储解析到的数据   for div in odiv:     #xpath函数返回的为列表,列表中存放的数据为Selector类型的数据。我们解析到的内容被封装在了Selector对象中,需要调用extract()函数将解析的内容从Selecor中取出。     author = div.xpath('.//div[@class="author clearfix"]/a/h2/text()')[0].extract()     content=div.xpath('.//div[@class="content"]/span/text()')[0].extract()     #打印展示爬取到的数据     print(author,content)
posted @ 2020-04-03 14:17  y0um  阅读(111)  评论(0)    收藏  举报

新人优惠服务器