Scrapy - 我如何从嵌套链接中提取信息
Scrapy - How do i extract info from nested links
我开始学习如何使用 Scrapy www.scrapy.org。
我的问题是我试图从另一个 link 中的 link 中提取信息。
流程是这样的:
我们输入www.imdb.com,然后在菜单中点击Watchlist > IMDbtop250,之后我们会在http://www.imdb.com/chart/top 我们将在其中找到电影列表;
我正在尝试输入每部具有这样 link 的电影 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
的电影中输入完整演员表 link,并开始从最后一个 link 中提取所有演员,所以问题是我知道如何提取信息但是在 link 的导航中苦苦挣扎,这是我现在拥有的代码
# -*- 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
我知道这应该以递归的方式完成,但首先我实际上是在尝试使 links 工作,并且 links 我是尝试至少在第一个 link.
中分享此特征 /title/tt0111161/
此外,我现在只是提取标题,以了解我是否在我想去的地方。
在此先感谢您的帮助。
删除了一些 link,因为我还没有 10 个声望。
你的allowed_domains错了,一定是:
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
我开始学习如何使用 Scrapy www.scrapy.org。
我的问题是我试图从另一个 link 中的 link 中提取信息。
流程是这样的:
我们输入www.imdb.com,然后在菜单中点击Watchlist > IMDbtop250,之后我们会在http://www.imdb.com/chart/top 我们将在其中找到电影列表;
我正在尝试输入每部具有这样 link 的电影 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
的电影中输入完整演员表 link,并开始从最后一个 link 中提取所有演员,所以问题是我知道如何提取信息但是在 link 的导航中苦苦挣扎,这是我现在拥有的代码
# -*- 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
我知道这应该以递归的方式完成,但首先我实际上是在尝试使 links 工作,并且 links 我是尝试至少在第一个 link.
中分享此特征/title/tt0111161/
此外,我现在只是提取标题,以了解我是否在我想去的地方。
在此先感谢您的帮助。
删除了一些 link,因为我还没有 10 个声望。
你的allowed_domains错了,一定是:
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