feadper框架理解

开始改公司的爬虫代码了,但是对feadper理解还不到位。比如代码中feadper.request所需要的参数是什么?

为了关闭多余的连接,requests库的http_connection的连接为什么要修改,怎么修改?

requests使用了urllib3库,默认的http connection是keep-alive的,requests设置False关闭。

回调函数的使用

在爬虫框架中,回调函数是一个非常重要的概念,它定义了在请求得到响应后要执行的处理逻辑。在 feapder 框架中,通过回调函数来定义如何处理爬取到的页面内容。

feapder.Request 中,有一个参数叫做 callback,它接受一个回调函数,即一个函数或者一个类中的方法。以下是回调函数的作用和不同的回调函数之间的区别:

  1. 作用:

    • 处理响应内容: 回调函数主要用于处理从服务器获取到的响应内容。在回调函数中,你可以解析 HTML、提取数据、处理异常等。

    • 生成新请求: 在回调函数中,你可以生成新的 feapder.Request 对象,从而形成请求链,实现深度爬取。

  2. 不同的回调函数:

    • 普通函数: 你可以直接使用一个普通的函数作为回调函数。这个函数应该接受一个参数,即爬取到的响应对象,然后在函数中实现相应的处理逻辑。

    • 类中的方法: 你也可以使用类中的方法作为回调函数。这时,你需要指定类的名称和方法名。例如,如果你有一个类 MySpider,其中有一个方法 parse_page,你可以使用 'callback': 'MySpider.parse_page' 来指定回调函数。

      在 Feapder 中,如果想要指定回调函数,可以使用字符串形式表示回调函数的路径,其中路径格式为 class_name.method_name。这样 Feapder 将根据指定的路径调用相应的回调函数。下面是一个简单的示例:

      import feapder
      ​
      class MySpider(feapder.AirSpider):
          def start_requests(self):
              start_url = 'https://example.com'
              yield feapder.Request(url=start_url, callback='MySpider.parse_page')
      ​
          def parse_page(self, request, response):
              # 在这里处理解析页面的逻辑
              print('Parsing page:', response.url)
      ​
      if __name__ == "__main__":
          MySpider().start()

      在上述代码中,start_requests 方法生成了一个初始请求,指定了 callback 参数为 'MySpider.parse_page'。Feapder 在执行时会根据这个字符串来调用相应的回调函数。此时,MySpider 类中的 parse_page 方法将被调用来处理页面解析的逻辑。

      请注意,在使用这种方式时,确保指定的回调函数路径是正确的。如果回调函数在不同的模块或类中,需要正确指定类名和方法名的路径。

使用不同的回调函数可以让你的爬虫更加灵活,能够根据不同的需求定制处理逻辑。例如,你可以定义一个回调函数用于解析页面内容,另一个回调函数用于生成新请求,从而实现更复杂的爬取逻辑。

定义一个回调函数用于解析页面内容,另一个回调函数用于生成新请求

当你想要定义一个回调函数用于解析页面内容,另一个回调函数用于生成新请求时,可以通过在 parse 方法中实现这两个逻辑。以下是一个简单的示例:

import feapder
​
class MySpider(feapder.AirSpider):
    def start_requests(self):
        start_url = 'https://example.com'
        yield feapder.Request(url=start_url, callback=self.parse)
​
    def parse(self, request, response):
        # 在这里处理解析页面的逻辑
        print('Parsing page:', response.url)
​
        # 解析页面内容,假设从中获取到新的链接
        new_links = ['https://example.com/page2', 'https://example.com/page3']
​
        # 生成新请求
        for link in new_links:
            yield feapder.Request(url=link, callback=self.parse_detail)
​
    def parse_detail(self, request, response):
        # 在这里处理解析详细页面的逻辑
        print('Parsing detail page:', response.url)
​
if __name__ == "__main__":
    MySpider().start()

在上述代码中,parse 方法用于解析页面内容,并从中获取新的链接。然后,通过 yield feapder.Request 生成新的请求,并指定 callbackself.parse_detailparse_detail 方法用于处理新请求的页面内容。通过这种方式,你可以将解析页面和生成新请求的逻辑分别放在两个不同的回调函数中。

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吕昀hui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值