scrapy 0.16, ответ не имеет селектора атрибутов, xpath()

Я искал в Google и видел вопросы о переполнении стека, но ничего не работает. я прошел через

response.body и response.headers работают хорошо, однако response.selector и response.xpath() дают ошибка о том, что такого атрибута для объекта ответа не существует

Я тоже не могу импортировать Selector, потому что в иерархии каталогов scrapy нет Selector (не знаю почему)

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
class DmozSpider(BaseSpider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        for sel in response.xpath('//ul/li'):
            title = sel.xpath('a/text()').extract()
            link = sel.xpath('a/@href').extract()
            desc = sel.xpath('text()').extract()
            print title, link, desc

Я использую SCRAPY 0.16 (работаю с Django Dynamic Scraper, поэтому не могу обновить, потому что он совместим только с этой версией)


person nobalG    schedule 14.08.2014    source источник


Ответы (1)


Вероятно, вы просматриваете документацию для последней версии. С версии 0.16 произошло довольно много изменений. Вы должны посмотреть документацию для 0.16 http://doc.scrapy.org/en/0.16

Ваш пример должен выглядеть так:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

class DmozSpider(BaseSpider):
    name = "dmoz"
    allowed_domains = ["dmoz.org"]
    start_urls = [
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
        "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
    ]

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//ul/li')
        for site in sites:
            title = site.select('a/text()').extract()
            link = site.select('a/@href').extract()
            desc = site.select('text()').extract()
            print title, link, desc

Как описано в руководстве http://doc.scrapy.org/en/0.16/intro/tutorial.html

person todinov    schedule 14.08.2014
comment
Большое спасибо за внимание к этому.... Еще раз спасибо... ссылка тоже была полезной... :) - person nobalG; 14.08.2014