여러 EU 사이트에서 일부 데이터를 긁어내어 response.xpath()
에 대한 내 전화가 텍스트를 위반하는 경우가 있습니다. 예를 들어, "& amp;" ¤
과 같은 html 엔티티와 \x92
또는 \xc3
등과 같은 깨진 바이트로 번역 된 것으로 나타났습니다. xpath 메소드 (lxml lib 사용)를 호출하기 전에 일부 실용적인 해결책을 발견했습니다. 다음과 같이 보입니다 :미들웨어에서 scrapy Response 객체를 수정할 수 있습니까?
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(...)
은 다른 지역에서 사용되지 않는 새로운 로컬 변수 응답을 생성합니다. 그리고 내 질문에 제목입니다 : 나는 거미 미들웨어 안의 응답 객체를 수정할 수 있습니까?
감사합니다. 맞습니다. 다운로더 미들웨어는 Response 객체를 대체하기에 완벽합니다. Unfortuanlly 미들웨어에서'_body_declared_encoding()'(None을 반환)을 사용할 수 없기 때문에 내 특정 솔루션이 제대로 작동하지 않았습니다. 그리고 response.body는 아직 원시이며 가능한 gziped 바이트 객체입니다. 나는 이것에 대해 더 많이 배우고 새로운 해결책을 찾으려고 노력할 것이다. 더 많은 답변을 주셔서 감사합니다. –