Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从嵌套链接中提取信息_Python_Scrapy_Href_Scrape_Rule - Fatal编程技术网

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

Python 如何从嵌套链接中提取信息,python,scrapy,href,scrape,rule,Python,Scrapy,Href,Scrape,Rule,我开始学习如何使用Scrapy 我的问题是,我试图从另一个链接中的链接中提取信息 流程如下: 我们进入www.imdb.com,然后在菜单上单击Watchlist>IMDbtop250,然后我们将进入找到电影列表 我试图进入每一部有这样一个链接的电影www.imdb.com/title/tt011161/?pf_rd_m=a2fgelunoqjnl&pf_rd_p=2398042102&pf_rd_r=1ex74egce6hvgf919h&pf_rd_s=center-1&pf_rd_t=155

我开始学习如何使用Scrapy

我的问题是,我试图从另一个链接中的链接中提取信息

流程如下:

我们进入www.imdb.com,然后在菜单上单击Watchlist>IMDbtop250,然后我们将进入找到电影列表

我试图进入每一部有这样一个链接的电影
www.imdb.com/title/tt011161/?pf_rd_m=a2fgelunoqjnl&pf_rd_p=2398042102&pf_rd_r=1ex74egce6hvgf919h&pf_rd_s=center-1&pf_rd_t=15506&pf_rd_I=top&ref_=chttp_-tt_1
,然后进入像这样的电影的全演员链接
www.imdb.com/title/tt011161/fullcredits?ref_u=tt_ucl_usm#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
我知道这应该是以递归的方式完成的,但首先我实际上是在尝试使链接正常工作,并且我尝试输入的两个链接至少在第一个链接中都具有此特征

而且,我现在只是提取标题,想知道我是否在我想去的地方

提前感谢您的帮助


删除了一些链接,因为我还没有10个声誉。

您允许的\u域是错误的,它必须是:

allowed_domains = ["imdb.com"]
从收视率最高的电影开始

start_urls = ['http://www.imdb.com/chart/top/']
解析每部电影并为演员列表准备url

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)
然后找到所有演员

def parse_actor(self, response):
        item = ImdbItem()
        item['title'] = response.css('h3[itemprop~=name] a::text').extract_first()
        item['actors'] = response.css('td[itemprop~=actor] span::text').extract()
        return item

这就是我想做的,现在我要更新一下,在我的JSON对象中添加海报,顺便问一下,你能解释一下
h3[itemprop~=name]a::text
的工作原理吗,我知道itemprop不等于name?你可以使用
scrapy shell(link)
我的问题是关于~=操作符的