Scrapy:如何爬取我从爬虫获得的URL?exceptions.NameError: 全局名称 'parse_detail' 未定义

0 投票
1 回答
561 浏览
提问于 2025-04-18 14:33

我在练习 scrapy,有个问题想请教:
我想再次抓取我从爬虫那里得到的链接,但不知道该怎么做。

这是我的代码:
你可以看到,我抓取的链接会保存在参数:movie_descriptionTW_URL 中。
然后我写了 yield Request(movie_descriptionTW, parse_detail) 来把结果发送到一个函数:

def parse_detail(self, response):
    print(response.url)

但是出现了一个错误:exceptions.NameError: global name 'parse_detail' is not defined
我该怎么解决这个问题呢?
请教教我!谢谢!

from scrapy.spider import Spider
from scrapy.selector import Selector
from yahoo.items import YahooItem
from scrapy.http.request import Request   

class MySpider(Spider):   
    name = "yahoogo"
    start_urls = ["https://tw.movies.yahoo.com/chart.html"]  

    def parse(self, response):
        sel = Selector(response)
        sites = sel.xpath("//tr")
        items = []
        for site in sites:
            item = YahooItem()
            ranking_list = site.xpath("td[@class='c1']/span/text()").extract()
            movie_descriptionTW  = site.xpath("(td[@class='c3']/*//a)[position() < last()-1]/text() | td[@class='c3']/a[1]/text() ").extract()
            movie_descriptionTW_URL = site.xpath("(td[@class='c3']/*//a[2]/@href) | td[@class='c3']/a[1]/@href ").extract()   

            # crawl again!
            yield Request(movie_descriptionTW, parse_detail)

            if ranking_list:    
                items.append(item)
        yield items     

    def parse_detail(self, response):
        print(response.url)

1 个回答

0

使用 self.parse_detail 来调用类里面的方法,像下面这样:

for url in movie_descriptionTW_URL:
    yield Request(url=url, callback=self.parse_detail)

撰写回答