【发布时间】:2017-10-25 07:02:15
【问题描述】:
我从几个欧盟网站上抓取了一些数据,发现有时我对response.xpath() 的调用会破坏文本。例如,我发现像 "& amp;" &#164 和其他类似的 html 实体会翻译成像 \x92 或 \xc3 等损坏的字节。
我找到了一些可行的解决方案 - 在调用 xpath 方法(使用 lxml lib)之前转义 html 实体。看起来像这样:
body_str = str(response.body, response._body_declared_encoding())
unescaped_body = html.unescape(body_str)
response = response.replace(body=unescaped_body)
如果在回调开始时立即调用此类代码以处理响应,这对我来说似乎工作正常。
我现在要做的是将这段代码移动到蜘蛛中间件中,为每个请求或另一个蜘蛛等使用这种方法。但问题是这段代码不会修改内部的响应对象
def process_spider_input(self, response, spider):
似乎response = response.replace(...) 创建了新的局部变量响应,在其他地方没有使用。
我的问题就在标题中:我可以修改蜘蛛中间件中的响应对象吗?
【问题讨论】:
标签: python python-3.x scrapy