如何解决将抓取的HtmlResponse对象传递给外部函数
使用Scrapy库,我希望将解析函数的响应传递给外部.py
文件中的函数。
所以我有我的蜘蛛侠:
import scrapy
from myspider.utils import ExternalClass
class MySpider(scrapy.spiders):
...
def parse(self,response):
print(response.url)
# https://www.example.com
ExternalClass.external_function(response)
和我的外部课程:
class ExternalClass()
def external_function(self,response)
print(response.url)
# AttributeError: 'tuple' object has no attribute 'url'
我认为我在这里可能无法使用Python。现在,我意识到ExternalClass
不知道如何处理HtmlResponse
对象,这可能是导致我出错的原因。如何获得ExternalClass
才能正确处理HtmlResponse
?
解决方法
好的,我已经解决了我的问题。通过在我的ExternalClass
类中创建MySpider
的实例,如下所示:
import scrapy
from myspider.utils import ExternalClass
class MySpider(scrapy.spiders):
...
# new instance
external_class = ExternalClass()
def parse(self,response):
print(response.url)
external_class.external_function(response)
并向ExternalClass添加一个构造函数:
class ExternalClass()
def __init__(self):
pass
def external_function(self,response)
print(response.url)
我现在可以传递我的HtmlResponse
对象并访问它的属性。
我不确定,但是我猜想这与将self
的引用从父类传递到实例化的ExternalClass
有关。尽管当我实例化ExternalClass
时我没有显式传递self
,并且我不认为Python对self
是隐式的吗?
您要在类级别定义external_class
对象,因此要访问它,您必须使用self
关键字,该关键字引用MySpider
的当前类,因此正确的方法将被使用
self.external_class.external_function(response)
或者您可以在parse方法中定义实例。这也可以。
def parse(self,response):
print(response.url)
external_class = ExternalClass()
external_class.external_function(response)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。