我用Scrapy框架想要爬取豆瓣中一些电影的上映日期或者导演等信息,发现不同电影的上映日期或者导演的信息的Xpath路径是不一样的,
如 https://movie.douban.com/subj... 这部电影的上映日期的Xpath是//*[@id="info"]/span[10],
而 https://movie.douban.com/subj... 这部电影的上映日期的Xpath是//*[@id="info"]/span[9],
两者的Span路径的数字不一样,造成爬取到的信息有的有,有的没有。
想请教一下大神,除了Xpath的语法,有什么其他的语法可以解决这个问题呢?
谢谢大神!
import scrapy
import json
from scrapy.http import Request
from scrapy.selector import Selector
from MovieSpider.items import MoviespiderItem
class MovieSpider(scrapy.Spider):
name = "MovieSpider"
allowed_domains = ["movie.douban.com"]
start_urls = ["https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%86%B7%E9%97%A8%E4%BD%B3%E7%89%87&sort=rank&page_limit=20&page_start=0"]
def parse(self, response):
list = json.loads(response.text)
urls = list['subjects']
for url in urls:
src = url['url']
yield Request(src, callback=self.parse_detail)
def parse_detail(self, response):
sel = Selector(response)
item = MoviespiderItem()
item['title'] = sel.xpath('//*[@id="content"]/h1/span[1]/text()').extract_first()
item['score'] = sel.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()').extract_first()
item['year'] = sel.xpath('//*[@id="info"]/span[10]/text()').extract_first()
item['author'] = sel.xpath('// *[ @ id = "info"]/span[1]/span[2]/a/text()').extract_first()
yield item
主要问题在于Xpath的路径,谢谢大神了!
相关分类