Python爬虫(十二)——Scrapy使用

Python爬虫(十二)——scrapy使用

步骤

创建一个scrapy工程

到你要建立的目录下面,打开命令行,输入以下代码:

scrapy startproject demo

将会产生如图的文件:

demo

其中包含一下文件

  • scrapy.cfg 部署Scrapy爬虫的配置文件
  • demo 用户自定义Python代码
    • _init_.py 初始化脚本
    • items.py Items代码模板
    • middlewares.py Middlewares代码模板
    • pipeline.py Pipeline代码模板
    • settings.py Scrapy爬虫的配置文件
    • spiders/ Spiders代码模板目录,存放这个工程中所建立的爬虫
      • _init_.py 初始文件
      • _pycache_/ 缓存目录

在一个工程中创建一个Spider模板

在demo文件中输入以下命令

scrapy genspider demo123 python123.io

可以看到在demo/spiders中增加了一个demo123.py文件。

demo123

demo123.py

初始代码:

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


class Demo123Spider(scrapy.Spider):
    name = 'demo123' # 当前爬虫名字
    allowed_domains = ['python123.io'] # 提交给命令行的域名
    start_urls = ['http://python123.io/'] # scrapy框架索要爬取的页面

    # def start_request(self):
    #     urls = [
    #         'http://python123.io/ws/demo.html'
    #     ]
    #     for url in urls:
    #         yield scrapy.Request(url=url, callback=self.parse) # 节省空间,提高效率
    # 

    def parse(self, response): # 处理响应
        pass
yield关键字的使用

如果一个函数包含yield语句,那它就是一个生成器。生成器是一个不断产生值的函数。生成器中的yield产生一个值后函数被冻结,而这个值将返回。被再次唤醒后生成器将继续从这个位置执行。在这个过程中函数的局部变量是不变的。

实例:

def gen(n):
    for i in range(n):
        yield i**2


def squ(n):
    ls = [i**2 for i in range(n)]
    return ls


for i in gen(5):
    print(i, '', end='')

for i in squ(5):
    print(i, '', end='')

yieldDemo

生成器的优势是节省存储空间、提高运行速度、使用更加灵活。在spider中使用yield可以在爬取大量网页的过程中节省空间,提高效率。

配置产生的spider爬虫

修改demo123.py文件,使它能够按照我们的要求去访问链接并提取数据。

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


class Demo123Spider(scrapy.Spider):
    name = 'demo123'
    #allowed_domains = ['python123.io']
    start_urls = ['http://python123.io/ws/demo.html']

    def parse(self, response):  # response 是从Internet中返回的数据包
        fname = response.url.split('/')[-1]  # 从response中提取名字作为文件名
        with open(fname, 'wb') as f:
            f.write(response.body)  # 将response中的内容保存到文件中
        self.log('Saved file &s.' & name)
运行爬虫,获取网页

在命令行中输入命令

scrapy crawl demo123

在demo目录下将会生成demo123.html文件。

gotHTML

编写Item Pipeline

编辑在创建工程的时候得到的pipeline.py。

设计的数据类型

Request

由Spider生成最后由Downloader执行的的HTTP请求。

常用属性或方法说明
.urlRequest对应的请求地址
.method对应的请求方法,‘GET’'POST’等
.headers字典类型的请求头
.body请求内容主体,字符串类型
.meta用户添加信息的拓展信息位,在Scrapy内部模块间传递信息使用
.copy复制该请求

Response

由Downloader生成最终给Spider处理的HTTP响应。

常用属性或方法说明
.urlResponse对应的请求地址
.statusHTTP状态码,值是200说明成功接受
.headersResponse对应的头部信息
.bodyResponse对应的内容信息,字符串类型
.flags标记
.request产生Response对应的Request对象
.copy()复制该响应

Item

由Spider从HTML页面中提取最终交给Item Pipeline处理的信息内容(字典类型)。

信息提取方法

  • Beautiful Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector
CSS Selector

CSS Selector是由W3C维护的一种信息提取方法。使用:

<HTML>.css('a::attr(href)').extract() # 通过标签名称(a)和标签属性(href)来得到对应的标签信息
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值