나는 병이있는 사이트를 크롤링하고 있습니다. parse
메서드는 먼저 모든 범주 링크를 추출한 다음 콜백을 사용하여 요청을 parse_category
으로 전달합니다.은 적절한 구문 분석기를 사용하여 리디렉션 된 응답을 처리합니다.
카테고리 중 하나에 제품 페이지가 리디렉션되는 문제가 있습니다. 그리고 내 parse_category
이 페이지를 인식하지 못합니다.
리디렉션 된 카테고리 페이지를 제품 페이지 파서로 어떻게 구문 분석합니까?
다음은 예입니다.
parse
은 3 개의 카테고리 페이지를 찾습니다.http://example.com/products/apple
pare_category
호출 모든 페이지를http://example.com/products/dell
http://example.com/products/samsung
. 각각은 제품 목록이있는 html 페이지를 반환합니다. 그러나apple
에는 단 하나의 제품이 있습니다iMac 27"
. 따라서http://example.com/products/apple/imac_27
으로 리디렉션됩니다. 이것은 제품 페이지입니다. 범주 구문 분석은 구문 분석에 실패합니다.
이 시나리오에서는 제품 구문 분석 방법 parse_product
을 호출해야합니다. 어떻게해야합니까?
parse_category 메서드에 로직을 추가하고 parse_product를 호출 할 수 있습니다. 나는 그것을 원하지 않는다. 나는 치료가 그것을 원할 것입니다. 하지만 예, URL 패턴이나 기타 필요한 정보를 제공 할 것입니다.
다음은 코드입니다.
class ExampleSpider(BaseSpider):
name = u'example.com'
allowed_domains = [u'www.example.com']
start_urls = [u'http://www.example.com/category.aspx']
def parse(self, response):
hxs = HtmlXPathSelector(response)
anchors = hxs.select('/xpath')
for anchor in anchors:
yield Request(urljoin(get_base_url(response), anchor), callback=self.parse_category)
def parse_category(self, response):
hxs = HtmlXPathSelector(response)
products = hxs.select(products_xpath).extract()
for url in products:
yield Request(url, callback=self.parse_product)
def parse_product(self, response):
# product parsing ...
pass
@alecxe 코드가 필요 없다고 생각합니다. 나는 나의 문제를 아주 잘 묘사했다. 문제는 코드에 관한 것이 아닙니다. 아직도 나는 당신에게 나의 단순화 된 거미를 준다. –