지난 18 시간 동안 필자는 코드의 버그에 대한 해결 방법을 찾기 위해 필사적으로 노력해 왔으며, 도움이 필요해.내 Scrapy/Elasticsearch 스크립트가 "serialize 할 수 없습니다"오류를 반환합니다.
웹 스크래퍼를 만들고 있는데, 그 목표는 페이지를 다운로드하고 앵커 텍스트, 내부 링크, 리퍼러 URL을 가져 와서 데이터를 DB에 저장하는 것입니다. 다음은 내 Scrapy 코드의 관련 부분입니다.
def parse_items(self, response):
item = InternallinkItem()
# Current URL
item["current_url"] = response.url
# get anchor text and clean it
anchor = response.meta.get('link_text')
item["anchor_text"] = " ".join(anchor.split())
# get the referrer URL (Problem is here)
referring_url = response.request.headers.get('Referer')
item["referring_url"] = referring_url
yield item
내가 사용하는 기술은 Python, Scrapy, Elasticsearch입니다. 그들은 모두 최신이며 내 dev 환경은 Windows입니다. 위의 코드를 실행하면이 오류가 발생합니다.
raise TypeError("Unable to serialize %r (type: %s)" % (data, type(data)))
TypeError: Unable to serialize b'https://example.com' (type: <class 'bytes'>)
많은 시행 착오 끝에 나는 그것을 추적하고 문제를 찾아 낼 수있었습니다. 리퍼러 URL을 가져 오는 부분을 제거하면 모든 것이 올바르게 작동합니다. 그것은 내가 원하는 데이터를 얻고 Elasticsearch에 성공적으로 저장합니다.
프로그래밍에 익숙하지 않은 사용자로서 진행 방법을 모릅니다.
은 또한에 주사를 놓았다,대신 scrapy-elasticsearch 라이브러리를 사용하는, 내 자신의 파이프 라인을 작성하는 시도 .. 작동하지 않았다, 다른 방법으로 참조 URL을 잡아하려고했으나 같은 오류가 발생했습니다 유형을 바이트에서 STR로 바꾸는 것은 잘 맞았 겠지만 작동하지 않았습니다.
내가 정말로 여기에서 붙어서 어떤 도움이라도 높게 평가 될 것입니다!
편집 : 내 settings.py 파일;
ITEM_PIPELINES = {
'scrapyelasticsearch.scrapyelasticsearch.ElasticSearchPipeline': 500
}
ELASTICSEARCH_SERVERS = ['localhost']
ELASTICSEARCH_INDEX = 'myindex'
ELASTICSEARCH_TYPE = 'internallink'
#ELASTICSEARCH_UNIQ_KEY = ['current_url']
'scrapy-elasticsearch' 관련 치료 프로젝트 설정을 게시 하시겠습니까? – alecxe
물론, @alecxe, 관련 부분에 대한 내 대답을 편집했습니다. –
어둠 속에서 촬영했는데,'ELASTICSEARCH_TYPE' 설정을 주석 처리한다면 여전히 실패할까요? – alecxe