Python + веб-скребок + скрапбинг: как получить ссылки на все фильмы со страницы IMDb? - PullRequest
0 голосов
/ 04 марта 2019

Мне нужно очистить все фильмы с этой страницы IMDb: https://www.imdb.com/list/ls055386972/.

Мой подход - сначала очистить все значения <a href="/title/tt0068646/?ref_=ttls_li_tt", то есть извлечь /title/tt0068646/?ref_=ttls_li_tt порции, а затем добавить 'https://www.imdb.com' для подготовки полного URL-адреса фильма, т. Е. https://www.imdb.com/title/tt0068646/?ref_=ttls_li_tt.Но всякий раз, когда я даю response.xpath('//h3[@class]/a[@href]').extract(), он извлекает нужную часть вместе с названием фильма: [u'<a href="/title/tt0068646/?ref_=ttls_li_tt">The Godfather</a>', u'<a href="/title/tt0108052/?ref_=ttls_li_tt">Schindler\'s List</a>......]' Я хочу только часть "/title/tt0068646/?ref_=ttls_li_tt".

Как поступить?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Я бы предложил вам использовать reports-html , чтобы получить все гиперссылки и удалить те, которые не соответствуют вашим критериям.Вы можете даже получить абсолютный URL, используя r.html.absolute_links

from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://www.imdb.com/list/ls055386972/')
links = r.html.links
for i in range(len(links)):
    if not links[i].startswith('/title/'):
        del links[i]
print(links)
0 голосов
/ 04 марта 2019

это рабочий код, пожалуйста попробуйте:

class MoviesSpider():

  name = 'movies' #name of the spider
  allowed_domains = ['imdb.com']
  start_url = 'http://imdb.com/list/ls055386972/'

  def __init__(self):
      super(MoviesSpider, self).__init__()

  def start_requests(self):
      yield Request(self.start_url, callback=self.parse, headers=self.headers)

  def parse(self, response):
      #events = response.xpath('//*[@property="url"]/@href').extract()
      links = response.xpath('//h3[@class]/a/@href').extract()

      final_links = []

      for link in links:
          final_link = 'http://www.imdb.com' + link
          final_links.append(final_link)

      for final_link in final_links:
          absolute_url = response.urljoin(final_link)
          yield Request(absolute_url, callback = self.parse_movies)

          #process next page url
          #next_page_url = response.xpath('//a[text() = "Next"]/@href').extract_first()
          #absolute_next_page_url = response.urljoin(next_page_url)
          #yield Request(absolute_next_page_url)

  def parse_movies(self, response):

      title  = response.xpath('//div[@class = "title_wrapper"]/h1[@class]/text()').extract_first()

      yield{
                'title': title,
      }
0 голосов
/ 04 марта 2019
import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.imdb.com/list/ls055386972/")
soup = BeautifulSoup(page.content, 'html.parser')

movies = soup.findAll('h3', attrs={'class' : 'lister-item-header'})
for movie in movies:
    print(movie.a['href'])

ВЫХОД :

/title/tt0068646/?ref_=ttls_li_tt
/title/tt0108052/?ref_=ttls_li_tt
/title/tt0050083/?ref_=ttls_li_tt
/title/tt0118799/?ref_=ttls_li_tt
.
.
.
.
/title/tt0088763/?ref_=ttls_li_tt
/title/tt0266543/?ref_=ttls_li_tt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...