06_yield与自动翻页

在这里插入图片描述


博文配套视频课程:24小时实现从零到AI人工智能


yield优点

yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰

而在Scrapy爬虫框架中,yield有天然的使用场景,因为我们并不知道爬虫每次获取数据的大小,如果每次都一起返回则数据量会非常大,此时如果采用yield来优化,则代码会非常简洁且高效

yield优化返回数据

# -*- coding: utf-8 -*-
import scrapy
from lxml import etree
from douban.items import DoubanItem

class DoubanSpiderSpider(scrapy.Spider):
    name = 'douban_spider'
    # 允许下载的域名
    allowed_domains = ['movie.douban.com']
    # 配置下载的首地址
    start_urls = ['http://movie.douban.com/top250']
    # 下载完毕之后的解析方法 (parse在源码中支持yield)
    def parse(self, response):
        # print(response.text)
        html = etree.HTML(response.text)
        # 首先通过xpath获取ol
        li_list = html.xpath("//ol[@class='grid_view']/li")
        for li in li_list:
            item = DoubanItem()
            # em = title = img = comment
            item['em'] = li.xpath(".//em/text()")[0]
            item['title'] = li.xpath(".//span[@class='title']/text()")[0]
            item['img'] = li.xpath(".//img/@src")[0]
            item['comment'] = li.xpath(".//div[@class='star']/span/text()")[-1]
            # yield返回当前电影的数据
            yield item
        try:
            # 获取后页超链接的值 (xpath返回的是list)
            next_page = html.xpath("//span[@class='next']/a/@href")[0]
            # 手动发送请求,让爬虫去解析下一页的数据 (ajax)
            yield scrapy.Request(url = 'http://movie.douban.com/top250' + next_page,callback=self.parse)
        except:
            print('下载完毕.......')

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Scrapy进行XPath页爬取网页的步骤如下: 1. 创建Scrapy项目 首先,我们需要创建一个Scrapy项目。可以在命令行中输入以下命令: ``` scrapy startproject project_name ``` 其中,`project_name`为项目名称。 2. 创建Spider 在项目的`spiders`文件夹中创建一个Spider,用于定义如何爬取网页。可以使用以下命令: ``` scrapy genspider spider_name domain.com ``` 其中,`spider_name`为Spider名称,`domain.com`为要爬取的域名。 在Spider中,我们需要定义如何提取数据。使用XPath可以方便地定位需要提取的数据。例如,如果我们想要提取网页中所有的标题,可以使用以下XPath表达式: ```python titles = response.xpath('//h1/text()').extract() ``` 其中,`response`为当前页面的响应对象。 3. 定义页规则 使用Scrapy,我们可以通过定义页规则实现自动页爬取网页。在Spider中,我们需要定义如何获取下一页的URL。可以使用以下代码: ```python next_page_url = response.xpath('//a[@class="next-page"]/@href') ``` 其中,`next-page`为下一页链接的类名,`@href`表示获取链接地址。 4. 发送页请求 在Spider中,我们可以通过`yield`语句发送请求获取下一页的数据。例如,下面的代码实现了自动页爬取网页的功能: ```python class MySpider(scrapy.Spider): name = "myspider" allowed_domains = ["example.com"] start_urls = ["http://www.example.com/page/1"] def parse(self, response): titles = response.xpath('//h1/text()').extract() for title in titles: yield {"title": title} next_page_url = response.xpath('//a[@class="next-page"]/@href') if next_page_url: yield scrapy.Request(next_page_url, callback=self.parse) ``` 在以上代码中,`callback=self.parse`表示在获取下一页数据后,再次调用`parse`方法进行数据提取。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值