我正在尝试使用元数据创建一个response
对象。
def parse(self,response):
if 'some string' in response.url:
data = json.loads(response.body_as_unicode())
response = HtmlResponse(url=response.url, meta=response.meta, body=data['html'].encode("utf8").decode('string_escape'))
这会出错:
TypeError: __init__() got an unexpected keyword argument 'meta'
知道如何创建response
对象,我仍然可以像正常请求一样调用response.meta
对象吗?
修改 正如Umair所建议的那样,我测试了这个:
def parse(self,response):
if 'some string' in response.url:
data = json.loads(response.body_as_unicode())
response.replace(body = data['html'].encode("utf8").decode('string_escape'))
但是,这会提供转义的HTML输出。在shell中,结果如下:
In [20]: response.replace(body = data['html'].encode("utf8").decode('string_escape'))
Out[20]: <200 https://www.some.url>
In [21]: response.xpath('//ul')
Out[21]:
[<Selector xpath='//ul' data=u'<ul class=\'\\"results_list\\"\'> '>,
使用HtmlResponse
时我得到了这个结果:
In [17]: test = HtmlResponse(url=response.url, body=data['html'].encode("utf8").decode('string_escape'))
In [18]: test.xpath('//ul')
Out[18]:
[<Selector xpath='//ul' data=u'<ul class="results_list"> '>,
答案 0 :(得分:0)
执行此操作,保持原始response
不变,并将其body
替换为您想要的新版本。
response.replace(body = data['html'].encode("utf8").decode('string_escape'))