Scrapy пустой CSV-файл

1

Я пытаюсь запустить мой scrapy spider, он не возвращает ошибку, но выводит свой пустой CSV файл

Я запускаю паука через обход scroll scroll AnimeReviews -o AnimeReviews.csv -t csv

это библиотека, которую я использовал

import scrapy
import json
from functools import reduce
from scrapy.selector import Selector
from AnimeReviews.items import AnimereviewsItem
last_page = 1789

это мой паук

class AnimeReviewsSpider(scrapy.Spider):
    name = 'AnimeReviews_spider'
    allowed_urls =['myanimelist.net']
    start_urls = ['https://myanimelist.net/reviews.php?t=anime']

def parse(self, response):
    page_urls = [response.url + "&p=" + str(pageNumber) for pageNumber in range(1, last_page+1)]
    for page_url in page_urls:
        yield scrapy.Request(page_url,
            callback = self.parse_reviews_page)

def parse_reviews_page(self, response):
    item = AnimereviewsItem()
    reviews = response.xpath('//*[@class="borderDark pt4 pb8 pl4 pr4 mb8"]').extract()       #each page displays 50 reviews

    for review in reviews:
        anime_title = Selector(text = review).xpath('//div[1]/a[1]/strong/text()').extract()
        anime_url = Selector(text = review).xpath('//a[@class="hoverinfo_trigger"]/@href').extract()
        anime_url = map(lambda x: 'https://myanimelist.net'+ x ,anime_url)
        review_time = Selector(text = review).xpath('//*[@style="float: right;"]/text()').extract()[0]
        reviewer_name = Selector(text = review).xpath('//div[2]/table/tr/td[2]/a/text()').extract()
        rating = Selector(text = review).xpath('//div[2]/table/tr/td[3]/div[2]/text()').extract()
        for i in range(len(rating)):
            rating_temp = rating[i]
            rating[i] = rating_temp.split(" ")[1]
        review_text = Selector(text = review).xpath('//*[@class="spaceit textReadability word-break"]').extract()
        for i in range(len(review_text)):
            text = Selector(text = review_text[i]).xpath('//text()').extract()
        pic_url = Selector(text = review).xpath('//div[3]/div[1]/div[1]/a/img/@data-src').extract()
        item['anime_title'] = anime_title
        item['anime_url'] = anime_url
        item['review_time'] = review_time
        item['reviewer'] = reviewer_name
        item['rating'] = rating
        item['review_text'] = review_text
        item['pic_url'] = pic_url
        yield item

это журнал после сканирования

2018-06-22 13:37:14 [scrapy.core.engine] INFO: Closing spider (finished)
2018-06-22 13:37:14 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 698849,
 'downloader/request_count': 1791,
 'downloader/request_method_count/GET': 1791,
 'downloader/response_bytes': 148209070,
 'downloader/response_count': 1791,
 'downloader/response_status_count/200': 1791,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2018, 6, 22, 11, 37, 14, 546133),
 'log_count/DEBUG': 1792,
 'log_count/INFO': 13,
 'request_depth_max': 1,
 'response_received_count': 1791,
 'scheduler/dequeued': 1790,
 'scheduler/dequeued/memory': 1790,
 'scheduler/enqueued': 1790,
 'scheduler/enqueued/memory': 1790,
 'start_time': datetime.datetime(2018, 6, 22, 11, 30, 38, 403920)}
2018-06-22 13:37:14 [scrapy.core.engine] INFO: Spider closed (finished)

если вам нужна дополнительная информация, дайте мне знать.

Теги:
scrapy

1 ответ

2

Самая большая проблема здесь - вы, выражения xpath.
Они выглядят так, будто они автоматически генерируются, и они слишком специфичны.

Например, даже ваш xpath для reviews ничего не соответствует.
Что-то простое, как //div[@class="borderDark"] соответствует всем 50 отзывам на странице, равно как и выражение css .borderDark.

Я бы рекомендовал познакомиться с селекторами xpath и/или css и написать свои селекторы вручную.

Кроме того, вы конвертируете селектора в текст (используя .extract), а затем обратно в селектор (с помощью Selector). Там не нужно это делать, вы можете просто работать с селекторами, возвращаемыми .xpath.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню