gpt4 book ai didi

python - scrapy空csv文件

转载 作者:行者123 更新时间:2023-12-01 01:48:24 24 4
gpt4 key购买 nike

我正在尝试运行我的 scrapy 蜘蛛,它没有返回错误,但输出了一个空的 csv 文件

我通过命令行 scrapycrawl 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)

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

最佳答案

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

例如,甚至您的 reviews 的 xpath 也不匹配任何内容。
//div[@class="borderDark"] 这样简单的内容会匹配页面上的所有 50 条评论,CSS 表达式 .borderDark 也是如此。

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

此外,您还将选择器转换为文本(使用 .extract),然后再转换回选择器(使用 Selector)。没有必要这样做,您只需使用 .xpath 返回的选择器即可。

关于python - scrapy空csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50987807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com