在 Scrapy 中区分 HTML 和非 HTML 页面
Distinguishing between HTML and non-HTML pages in Scrapy
我正在 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))
这可以完成工作,但只要响应只是一个 Response,而不是 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()
...
,接近底部
我正在 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))
这可以完成工作,但只要响应只是一个 Response,而不是 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()
...
,接近底部