我正在Scrapy中构建一个Spider,它遵循它可以找到的所有链接,并将URL发送到管道。目前,这是我的代码:

from scrapy import Spider
from scrapy.http import Request
from scrapy.http import TextResponse
from scrapy.selector import Selector
from scrapyTest.items import TestItem
import urlparse


class TestSpider(Spider):
name = 'TestSpider'
allowed_domains = ['pyzaist.com']
start_urls = ['http://pyzaist.com/drone']

def parse(self, response):
    item = TestItem()
    item["url"] = response.url
    yield item

    links = response.xpath("//a/@href").extract()
    for link in links:
        yield Request(urlparse.urljoin(response.url, link))


这样就可以了,但是只要响应只是一个响应,而不是TextResponse或HtmlResponse,就抛出错误。这是因为没有Response.xpath()。我尝试通过以下方法对此进行测试:

if type(response) is TextResponse:
    links = response.xpath("//a@href").extract()
    ...


但无济于事。当我这样做时,它永远不会输入if语句。我是Python的新手,所以这可能是一门语言。感谢您的帮助。

最佳答案

没关系,我找到了答案。 type()仅提供有关立即数类型的信息。它没有说明继承。我正在寻找isinstance()。此代码有效:

if isinstance(response, TextResponse):
    links = response.xpath("//a/@href").extract()
    ...


https://stackoverflow.com/a/2225066/1455074,靠近底部

10-01 23:48