调用外部 api 的最佳实践是什么?

用户1507889

因此,假设我想编写一个使用 Facebook API 计算网站每个页面上的赞的蜘蛛。如果我导入请求库,我可以调用 Facebook 图形 API,如下所示。

import scrapy
import json
import requests

API_KEY="KEY_GOES_HERE"

class WebSite(scrapy.Spider):
    name = "website_page"
    allowed_domains = ["website.com"]
    start_urls = ['https://website.com/']
    def get_likes(self,url):
      base='https://graph.facebook.com/{}?access_token={}'.format(url,API_KEY)
      data=requests.get(base)
      return self.parse_likes(data)
    def parse_likes(self, data):
      data = json.loads(data.text)
      return data['id'],data['share']['comment_count'],data['share']['share_count']

    def parse(self, response):
        item= {}
        item['url'] = response.url
        links = response.css('a::attr(href)').extract()
        item['fb_url'],item['shares'],item['comments'] = self.get_likes(response.url)
        for link in links: 
          link = response.urljoin(link)
          item['link'] = link
          yield scrapy.Request(link, callback=self.parse)
        yield item

但是,如果我不使用请求,而是使用 scrapy.Request 调用,我似乎无法使此代码工作。像这样的东西。

import scrapy
import json
import requests

API_KEY="KEY_GOES_HERE"

class WebSite(scrapy.Spider):
    name = "website_page"
    allowed_domains = ["website.com"]
    start_urls = ['https://website.com/']
    def get_likes(self,url):
      base='https://graph.facebook.com/{}?access_token={}'.format(url,API_KEY)
      return scrapy.Request(base,callback=self.parse_likes)
    def parse_likes(self, data):
      data = json.loads(data.text)
      return data['id'],data['share']['comment_count'],data['share']['share_count']

    def parse(self, response):
        item= {}
        links = response.css('a::attr(href)').extract()
        item['url'] = response.url
        item['fb_data']=self.get_likes(response.url).body
        for link in links: 
          link = response.urljoin(link)
          item['link'] = link
          yield scrapy.Request(link, callback=self.parse)
        yield item

在这种情况下,我只收到 Facebook 数据的空白响应。我想我对scrapy.Request 方法相对于标准请求库的工作方式缺乏一些了解。有任何想法吗?

花岗岩龙

这是一个非常常见的情况:如何从多个 url 的项目中产生?
最常见的解决方案是通过在request.meta参数中携带您的项目来链接请求

对于您使用此逻辑的示例实现,可能如下所示:

class WebSite(scrapy.Spider):
    base='https://graph.facebook.com/{}?access_token={}'.format
    api_key = '1234'

    def parse(self, response):
        links = response.css('a::attr(href)').extract()
        for link in links: 
            item= {}
            item['url'] = response.url
            item['fb_data']=self.get_likes(response.url).body
            item['link'] = response.urljoin(link)
            api_url = self.base(self.api_key, link)
            yield scrapy.Request(api_url,
                                 callback=self.parse_likes, 
                                 meta={'item': item})

    def parse_likes(self, response):
        item = response.meta['item']
        data = json.loads(data.text)
        share_count = data['id'],data['share']['comment_count'],data['share']['share_count']
        item['share_count'] = share_count
        yield item

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Observer 最佳实践中调用外部 API 类

来自分类Dev

UncheckedIOException和Stream API的成语/最佳实践是什么?

来自分类Dev

UncheckedIOException和Stream API的成语/最佳实践是什么?

来自分类Dev

从活动调用 API 的最佳实践

来自分类Dev

在WASM中调用我的API的最佳方法是什么?

来自分类Dev

使用Express从您的提交中.gitignore API密钥的最佳实践是什么?

来自分类Dev

从多语言API进行JSON响应的最佳实践是什么

来自分类Dev

在REST-ful api中序列化外键字段的最佳实践是什么

来自分类Dev

使用PayPal REST API SDK检查账单计划付款的最佳实践是什么?

来自分类Dev

当前在React / Meteor中使用Google Maps API的最佳实践是什么

来自分类Dev

通过Core Web API中的可选参数删除多个记录的最佳实践是什么?

来自分类Dev

在Next.js中获取非API数据的最佳实践是什么(通过Vercel部署)

来自分类Dev

在Ionic Framework中使用带有oAuth的ASP.NET Web Api的最佳实践是什么?

来自分类Dev

从REST API获取相关/嵌套数据的最佳实践是什么?

来自分类Dev

Typescript和Jquery:将类调用为Jquery onclick函数的最佳实践是什么?

来自分类Dev

在PHP中基于变量值调用不同方法的最佳实践是什么?

来自分类Dev

将错误传递给调用方的最佳实践是什么?

来自分类Dev

Express和Nodejs:调用外部API的最佳方法

来自分类Dev

Django外部api调用

来自分类Dev

在 Rails API for React 中从外部表查询数据的最佳实践

来自分类Dev

检测Java API调用是否成功完成的最佳方法是什么

来自分类Dev

在Web API控制器中调用多个异步任务的最佳方法是什么?

来自分类Dev

在.net Core C#中并行校准API调用的最佳方法是什么?

来自分类Dev

在实时节点服务器上调用我自己的 API 的最佳方法是什么?

来自分类Dev

在不同时间进行 API 调用的最佳方法是什么?

来自分类Dev

单个 VC 的 iOS 多个 API 调用 - 最佳实践

来自分类Dev

与API一起使用时,将Date对象存储在数据库中的最佳实践是什么

来自分类Dev

在WEB API服务器和Android客户端应用程序之间共享模型的最佳实践是什么

来自分类Dev

角度-从另一个控制器调用特定于控制器的功能的最佳实践是什么?

Related 相关文章

  1. 1

    在 Observer 最佳实践中调用外部 API 类

  2. 2

    UncheckedIOException和Stream API的成语/最佳实践是什么?

  3. 3

    UncheckedIOException和Stream API的成语/最佳实践是什么?

  4. 4

    从活动调用 API 的最佳实践

  5. 5

    在WASM中调用我的API的最佳方法是什么?

  6. 6

    使用Express从您的提交中.gitignore API密钥的最佳实践是什么?

  7. 7

    从多语言API进行JSON响应的最佳实践是什么

  8. 8

    在REST-ful api中序列化外键字段的最佳实践是什么

  9. 9

    使用PayPal REST API SDK检查账单计划付款的最佳实践是什么?

  10. 10

    当前在React / Meteor中使用Google Maps API的最佳实践是什么

  11. 11

    通过Core Web API中的可选参数删除多个记录的最佳实践是什么?

  12. 12

    在Next.js中获取非API数据的最佳实践是什么(通过Vercel部署)

  13. 13

    在Ionic Framework中使用带有oAuth的ASP.NET Web Api的最佳实践是什么?

  14. 14

    从REST API获取相关/嵌套数据的最佳实践是什么?

  15. 15

    Typescript和Jquery:将类调用为Jquery onclick函数的最佳实践是什么?

  16. 16

    在PHP中基于变量值调用不同方法的最佳实践是什么?

  17. 17

    将错误传递给调用方的最佳实践是什么?

  18. 18

    Express和Nodejs:调用外部API的最佳方法

  19. 19

    Django外部api调用

  20. 20

    在 Rails API for React 中从外部表查询数据的最佳实践

  21. 21

    检测Java API调用是否成功完成的最佳方法是什么

  22. 22

    在Web API控制器中调用多个异步任务的最佳方法是什么?

  23. 23

    在.net Core C#中并行校准API调用的最佳方法是什么?

  24. 24

    在实时节点服务器上调用我自己的 API 的最佳方法是什么?

  25. 25

    在不同时间进行 API 调用的最佳方法是什么?

  26. 26

    单个 VC 的 iOS 多个 API 调用 - 最佳实践

  27. 27

    与API一起使用时,将Date对象存储在数据库中的最佳实践是什么

  28. 28

    在WEB API服务器和Android客户端应用程序之间共享模型的最佳实践是什么

  29. 29

    角度-从另一个控制器调用特定于控制器的功能的最佳实践是什么?

热门标签

归档