Scrapy - 如何从嵌套链接中提取信息

时间:2017-07-16 08:34:04

标签: python scrapy href scrape rule

我开始学习如何使用Scrapy www.scrapy.org

我的问题是我正在尝试从另一个链接中的链接中提取信息。

流程是这样的:

我们输入 www.imdb.com ,然后在菜单上点击关注列表> IMDbtop250,之后我们将以 http://www.imdb.com/chart/top 结束,我们会找到一系列电影;

我正在尝试输入每个具有此www.imdb.com/title/tt0111161/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=2398042102&pf_rd_r=1EX7BT4EGCE6HVGF919H&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_1链接的电影,然后从看起来像www.imdb.com/title/tt0111161/fullcredits?ref_=tt_cl_sm#cast的电影中输入完整的演员链接,并开始从最后一个链接中提取所有演员,问题是,我知道如何提取信息,但努力与链接的导航,这是我现在的代码

    # -*- coding: utf-8 -*-
from scrapy import item
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor


class ActorsSpider(CrawlSpider):
    name = "actors"
    allowed_domains = ["www.imdb.com"]
    start_urls = ['http://www.imdb.com/chart/top',
                  'http://www.imdb.com/title/']

    def parse(self, response):
        rules = {
            Rule(LinkExtractor(allow=r'/title/tt0111161/?pf_rd_m=A2FGELUUNOQJNL&pf_rd_p=2398042102&pf_rd_r=0BP5GZ1CWDNT2NFAWKDN&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_i=top&ref_=chttp_tt_1')),
            Rule(LinkExtractor(allow=r'fullcredits?ref_=tt_cl_sm#cast'), callback='parse_actor'),
        }

    def parse_actor(self, response):
        item['title'] = response.css('title').extract()[0]
        return item

我知道这应该是以递归的方式完成的,但首先我实际上是想让链接正常工作,而我想要输入的两个链接共享这个特征/title/tt0111161/ at至少对于第一个链接。

另外,我现在只是提取头衔,知道我是不是想去的地方。

提前感谢您的帮助。

删除了一些链接,因为我没有10点声望。

1 个答案:

答案 0 :(得分:0)

您的allowed_domains错误,必须是:

var hoverSound = new Howl({
  src: ['../audio/hover.mp3']
 });

function whatEver() {
    if (whatever) {
    hoverSound.play();
   }
 }

从评分最高的电影开始

allowed_domains = ["imdb.com"]

解析每部电影并为演员列表准备网址

start_urls = ['http://www.imdb.com/chart/top/']

然后找到所有演员

def parse(self, response):
        for film in response.css('.titleColumn'):
            url = film.css('a::attr(href)').extract_first()
            actors_url = 'http://imdb.com' + url[:17] + 'fullcredits?ref_=tt_cl_sm#cast'
            yield scrapy.Request(actors_url, self.parse_actor)