当前位置: 首页 > 知识库问答 >
问题:

空csv文件

东方俊明
2023-03-14

我正在尝试运行我的scrapy spider,它不会返回错误,但会输出一个空的csv文件

我正在通过命令行scrapy crawl 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)

如果你需要更多的信息,请告诉我。

共有1个答案

晋安国
2023-03-14

这里最大的问题是xpath表达式。
它们看起来像是自动生成的,而且太具体了。

例如,甚至你的评论的xpath都不匹配任何东西。
//div[@class="border达克"]这样简单的东西可以匹配页面上的所有50个评论,css表达式. border达克也是如此。

我建议熟悉xpath和/或css选择器,并手工编写选择器。

此外,您正在将选择器转换为文本(使用。提取),然后返回到选择器(使用选择器)。没有必要这样做,您可以简单地使用由. xpath返回的选择器。

 类似资料:
  • 这里是蜘蛛: 以下是项目: 使用以下命令运行spider时:

  • 假设我有一个简单的管道分隔文件,缺少值: 我把它读到了一个数据目录中: 缺少的第三列不是null值,而是字符串null:

  • 我使用papa parse读取远程托管的csv文件。问题是头行不在文件的第一行,而是文件以几行空行开始,然后是头行,然后是所有数据。我正在努力让papa parse忽略文件开头的空行。有什么我遗漏的吗?我希望避免加载整个文件(只需要6000多行中的前几行)。

  • 在R中,我们可以从存储在R环境之外的文件中读取数据。 我们还可以将数据写入文件,这些文件将由操作系统存储和访问。 R可以读写各种文件格式,如csv,excel,xml等。 在本章中,我们将学习从csv文件中读取数据,然后将数据写入csv文件。 该文件应存在于当前工作目录中,以便R可以读取它。 当然我们也可以设置自己的目录并从那里读取文件。 获取和设置工作目录 您可以使用getwd()函数检查R工作

  • 读 # csv_reader.py import csv import sys with open(sys.argv[1], 'rt') as f: reader = csv.reader(f) for row in reader: print(row) 写 # csv_writer.py import csv import sys unicode_chars

  • 问题内容: 我正在解析CSV文件,但是最后一行的最后9列为空,只有一行,并且用逗号分隔的字符串会忽略其余的空列。 这是演示此代码的代码: 列的大小为20,应为29。任何想法? 问题答案: 查看有关以下内容的文档: 该方法的工作方式就像通过调用带有给定表达式且限制参数为零的二参数拆分方法。因此,结尾的空字符串不包括在结果数组中。 因此,您需要查看其他方法的选项 limit参数控制应用图案的次数,因此