Python 如何从嵌套链接中提取信息
我开始学习如何使用Scrapy 我的问题是,我试图从另一个链接中的链接中提取信息 流程如下: 我们进入www.imdb.com,然后在菜单上单击Watchlist>IMDbtop250,然后我们将进入找到电影列表 我试图进入每一部有这样一个链接的电影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
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)
我的问题是关于~=操作符的