Соскребание каждого отдельного сайта фильма в IMDB с помощью Scrapy - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть CSV-файл, который содержит imdb movieID из 300 фильмов.URL-адреса фильмов imdb для каждого фильма имеют формат: https://www.imdb.com/title/ttmovieID

Я хочу очистить выделенный сайт каждого фильма для ссылки на миниатюру с изображением, названия, актеров и года выпуска и записать его в файл CSV, где каждыйстрока будет содержать данные для каждого фильма,

Так как у меня есть movieID для каждого фильма в CSV-файле, каким должен быть start_urls моего паука и какова должна быть структура моей функции синтаксического анализа?Кроме того, как записать его в CSV-файл?

У меня есть следующий подход для верхней 250 страниц IMDB.Какие изменения я должен внести в start_urls и ссылки?

import scrapy
import csv
from example.items import MovieItem

class ImdbSpider(scrapy.Spider):
name = "imdbtestspider"
allowed_domains = ["imdb.com"]
start_urls = ['http://www.imdb.com/chart/top',]

def parse(self,response):
     links=response.xpath('//tbody[@class="lister-list"]/tr/td[@class="titleColumn"]/a/@href').extract()
     i=1
     for link in links:
         abs_url=response.urljoin(link)
         url_next='//*[@id="main"]/div/span/div/div/div[2]/table/tbody/tr['+str(i)+']/td[3]/strong/text()'
         rating=response.xpath(url_next).extract()
         if(i <= len(links)):
             i=i+1
         yield scrapy.Request(abs_url, callback=self.parse_indetail, meta={'rating' : rating })

def parse_indetail(self,response):
    item = MovieItem()
    item['title'] = response.xpath('//div[@class="title_wrapper"]/h1/text()').extract()[0][:-1]
    item['director'] = response.xpath('//div[@class="credit_summary_item"]/span[@itemprop="director"]/a/span/text()').extract()

    return item

1 Ответ

0 голосов
/ 04 февраля 2019

Вы можете просто прочитать ваш файл .csv в функции start_requests и получать оттуда запросы.Код может быть что-то вроде:

import csv
from scrapy import Request
...
def start_requests(self):
    with open('imdb_ids.csv') as csv_file:
        ids = csv.reader(csv_file, delimiter=',')
        line = 0
        for id in ids:
            if line > 0:
                yield Request('https://www.imdb.com/title/ttmovie' + id)
            line+=1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...