LINUX.ORG.RU

Парсинг сайта, ScraPy


0

1

Есть главная страничка веб-сайта, на которой расоположены ссылки на другие страницы. Мне нужно сделать следующее: 1. сохранить полную ссылку на другую страницу 2. получить текст, расположенный между тегами <p></p> на другой странице.

Для этого, я написал (по туториалам ScraPy) скрипт на Питоне. Код паука:

def start_requests(self):
        date=" "
        for url in self.urls:
            yield Request(url=url,meta={'date':str(url)[-15:-5]},callback=self.parse)

    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath('//*[@id="content"]/div[2]/div/div/div[1]')
        passed_date=response.meta.get('date')
        items=[]
        for site in sites:
            item = DmozItem()
            # item['title'] = site.xpath('.//div/a/text()').extract()
            item['link'] = str(site.xpath('.//a/@href').extract()).replace("u'","")
            item['link']=item['link'].replace("'","")
            # item['time'] = site.xpath('.//div/text()').extract()
            # item['date'] = passed_date
            self.all_articles.append(item)
            for link_of_the_article in item['link'].split(','):
                yield Request(url=link_of_the_article,callback=self.get_text_of_the_article)


    def get_text_of_the_article(self,response):
        sel=Selector(response)
        item=DmozItem()
        item['text']=sel.xpath('//*[@id="articleText"]/span[3]/p/span/text()').extract()
        total_items=[]
        print (sel.xpath('//*[@id="articleText"]/span[3]/p/span/text()').extract())
        total_items.append(item)
        return str(sel.xpath('//*[@id="articleText"]/span[3]/p/span/text()').extract())

Вызов функции

get_text_of_the_article(self,response)
дает мне следующее:
<bound method DmozSpider.get_text_of_the_article of <DmozSpider 'dmoz' at 0x10b2e6890>>

В чем ошибка?



Последнее исправление: teranceee (всего исправлений: 4)
Ответ на: комментарий от heilkitty

Как именно происходит вызов?

for link_of_the_article in item['link'].split(','):
    print self.get_text_of_the_article               
    yield Request(url=link_of_the_article,callback=self.get_text_of_the_article)
teranceee
() автор топика
Ответ на: Как именно происходит вызов? от teranceee

зачем ты это делаешь? паук запускается из проекта scrapy crawl spidername

В чем ошибка?

ошибки нет, как и смысла печатать адрес объекта

return str

колбек должен отдать request, item или none

wxw ★★★★★
()
Последнее исправление: wxw (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.