【问题标题】:Distinguishing between HTML and non-HTML pages in Scrapy在 Scrapy 中区分 HTML 和非 HTML 页面
【发布时间】:2015-09-03 06:59:33
【问题描述】:

我正在 Scrapy 中构建一个蜘蛛,它跟踪它可以找到的所有链接,并将 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 新手,所以它可能是一种语言问题。感谢您的帮助。

【问题讨论】:

    标签: python html web-crawler scrapy scrapy-spider


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2011-11-01
      • 1970-01-01
      相关资源
      最近更新 更多