문제

살펴보세요 이 거미 예 스크래픽 문서에서. 설명은 다음과 같습니다.

이 거미는 example.com의 홈페이지, 카테고리 링크를 수집하고 항목 링크를 수집하여 후자를 parse_item 메소드와 구문 분석하기 시작합니다. 각 항목 응답에 대해 일부 데이터는 XPath를 사용하여 HTML에서 추출되며 항목이 채워집니다.

동일한 거미를 정확하게 복사하고 "example.com"을 다른 초기 URL로 교체했습니다.

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item
from stb.items import StbItem

class StbSpider(CrawlSpider):
    domain_name = "stb"
    start_urls = ['http://www.stblaw.com/bios/MAlpuche.htm']

    rules = (Rule(SgmlLinkExtractor(allow=(r'/bios/.\w+\.htm', )), callback='parse', follow=True), )

    def parse(self, response):
        hxs = HtmlXPathSelector(response)

        item = StbItem()
        item['JD'] = hxs.select('//td[@class="bodycopysmall"]').re('\d\d\d\d\sJ.D.')
        return item

SPIDER = StbSpider()

그러나 내 거미 "STB"는 예상대로 "/bios/"에서 링크를 수집하지 않습니다. 초기 URL을 실행하고 긁습니다 item['JD'] 파일에 쓰고 그만 두었습니다.

왜 그런가요? SgmlLinkExtractor 무시됩니까? 그만큼 Rule 내부에서 구문 오류를 포착하기 때문에 읽습니다 Rule 선.

이것은 버그입니까? 내 코드에 문제가 있습니까? 마다 실행할 때마다 볼 수있는 무리가없는 오류를 제외하고는 오류가 없습니다.

내가 여기서 잘못하고있는 일을 아는 것이 좋을 것입니다. 단서에 감사드립니다. 나는 무엇을 오해하고 있습니까? SgmlLinkExtractor 해야합니까?

도움이 되었습니까?

해결책

그만큼 parse 기능은 실제로 Crawlspider 클래스에서 구현되고 사용되며 의도하지 않게 재정의하고 있습니다. 이름을 다른 것으로 변경하면 parse_item, 그러면 규칙이 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top