我有这个简单的代码:
import scrapy
import re
import json
# from scrapy.http import FormRequest
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class SpiderRecipe(CrawlSpider):
name = "recipe"
start_urls = [
# 'https://www.giallozafferano.it/',
'https://ricetta.it/dolci?page=1',
# 'https://www.buonissimo.it/',
# 'https://migusto.migros.ch/it.html'
]
def parse(self,response):
URL = response.request.url()
if URL.split('/')[2] == "www.ricetta.it":
recipes = response.xpath('//div[contains(@class,"row")]/div[contains(@class,"post-img-left")]').extract()
# iterate through each recipe in a page
for x in recipes.extract():
title = response.xpath(recipes + '/a[contains(@class, "post-title")]/text()').extract()[x]
image = response.xpath(recipes + '/div[contains(@class,"videoContainer")]/img/@src').extract()[x]
description = response.xpath(recipes + '/p[contains(@class,"post-excerpt")]/text()').extract()[x]
yield {
'Title': title,
'Image': image,
'Description': description,
}
page = int(URL.split('=')[1]) + 1;
if (page <= 148):
# iterate through each page of recipes
yield scrapy.Request(URL.split('=')[0] + str(page), callback=self.parse, dont_filter=True)
它由终端使用scrapy runspider recipe.py com-o output.json调用。
codw的第一部分可以工作,因为它可以接受起始URL,但我不明白为什么parse函数没有被调用,而且如果代码不正确,我试图在函数的开头打印一个字符串,但它没有工作。我试图检查解决方案,但是我的函数在类内部,并且我已经正确地插入了我们必须开始的url(链接是正确的)。也许这是一个很容易的东西,但我找不到它。我还读到,函数必须被调用,但在例子中没有人这样做,此外,我不断调用它在代码的结尾。
2条答案
按热度按时间jjhzyzn01#
我解决了这个问题。我在另一个文件夹里有一个python的环境,然后我必须首先激活这个环境,然后我可以从我的spider所在的终端启动scrapy。这个类不需要示例化,方法也不需要手动调用,因为Scrapy会自动完成。
x7yiwoj42#
当我开始学习scrappy并发现它来自www.example.com文件时,我也遇到了同样的问题settings.py
帮助我希望这对你也有帮助