IMDB Movie Scraping дает пустой CSV с использованием Scrapy

Учитывая приведенную выше строку данных, приведенный ниже код работает. Он проходит через каждый объект; если категория существует в массиве groupedObjects, ее хиты и байты добавляются к существующему объекту. В противном случае он считается новым и добавляется в массив groupedObjects.

В этом решении используются underscore.js и jQuery

Вот демон jsfiddle: http: // jsfiddle .net / R3p4c / 2 /

var objects = $.parseJSON(dataString);
var categories = new Array();
var groupedObjects = new Array();
var i = 0;

_.each(objects,function(obj){
    var existingObj;
    if($.inArray(obj.category,categories) >= 0) {
        existingObj = _.find(objects,function(o){return o.category === obj.category; });
        existingObj.hits += obj.hits;
        existingObj.bytes += obj.bytes;
    } else {
        groupedObjects[i] = obj;
        categories[i] = obj.category;
        i++;
  }
});

groupedObjects = _.sortBy(groupedObjects,function(obj){ return obj.bytes; }).reverse();

0
задан taygetos 17 January 2019 в 14:14
поделиться

2 ответа

Это еще один способ попробовать. Я использовал селектор css вместо xpath, чтобы сделать скрипт менее подробным.

import scrapy

class ImbdsdpyderSpider(scrapy.Spider):
    name = 'imbdspider'
    start_urls = ['http://www.imdb.com/chart/top']

    def parse(self, response):
        for link in response.css(".titleColumn a[href^='/title/']::attr(href)").extract():
            yield scrapy.Request(response.urljoin(link),callback=self.get_info)

    def get_info(self, response):
        item = {}
        title = response.css(".title_wrapper h1::text").extract_first()
        item['title'] = ' '.join(title.split()) if title else None
        item['directors'] = response.css(".credit_summary_item h4:contains('Director') ~ a::text").extract()
        item['writers'] = response.css(".credit_summary_item h4:contains('Writer') ~ a::text").extract()
        item['stars'] = response.css(".credit_summary_item h4:contains('Stars') ~ a::text").extract()
        popularity = response.css(".titleReviewBarSubItem:contains('Popularity') .subText::text").extract_first()
        item['popularity'] = ' '.join(popularity.split()).strip("(") if popularity else None
        item['rating'] = response.css(".ratingValue span::text").extract_first()
        yield item
0
ответ дан SIM 17 January 2019 в 14:14
поделиться

Я проверил тебя, учитывая xpaths, я не знаю, что они ошибаются или на самом деле ошибаются.

Например,

xpath = //*="main"]/div/span/div/div/div[2]/table/tbody/tr['+str(i)+']/td[3]/strong/text()

#There is not table when you reach at div[2]

//div[@class="title_wrapper"])/h1/text()    #here there is and error after `]` ) is bad syntax

Кроме того, ваши xpaths не дают никаких результатов.

0
ответ дан ThunderMind 17 January 2019 в 14:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: