Следующие URL в javascript - Scrapy Splash - PullRequest
0 голосов
/ 24 января 2020

Я очень плохо знаком с веб-скребком. Мне удается извлекать информацию из веб-сайтов c, но сейчас я пытаюсь следовать URL-адресам и извлекать данные (что, конечно, включает в себя javascript). Я установил scrapy-spla sh для того же самого, который работает отлично. Веб-сайт, который я пытаюсь почистить, - https://www.ta.com/portfolio/investments/ari-network-services-inc, а кнопка в правой верхней части открывает вам следующую страницу (javascript, следовательно, spla sh) , Я хочу собрать некоторые базовые c данные (например, название компании, сектора и т.д. c) на всех страницах до последней страницы. Это то, что я сделал до сих пор, и мне нужна помощь, чтобы исправить это, чтобы успешно выполнить.


import scrapy
from scrapy_splash import SplashRequest
import urllib.parse as urlparse


class TAFolio(scrapy.Spider):
    name = 'Portfolio'
    start_urls = ['https://www.ta.com/portfolio/investments/ari-network-services-inc']

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url=url, callback = self.parse, args={"wait" : 3})

    def parse(self, response):

        companyname = response.css('h1.item_detail-main-info-heading::text').extract_first()
        sectors = response.css('.item_detail-main-info-group-item::text')[0].extract()
        investmentyear = response.css('.item_detail-main-info-group-item::text')[1].extract()
        status = response.css('.item_detail-main-info-group-item::text')[2].extract()
        location = response.css('.item_detail-main-info-group-item::text')[3].extract()
        region = response.css('.item_detail-main-info-group-item::text')[4].extract()
        team = response.css('div.item_detail-main-info-group a::text').extract()

        yield {
        'companyname': companyname,
        'sectors': sectors,
        'investmentyear': investmentyear,
        'status': status,
        'location': location,
        'region': region,
        'team': team
        }

        next_page = response.css('li.item_detail-nav-item--next a::attr(href)').extract()


        if next_page is not None:
            yield SplashRequest(urlparse.urljoin('https://www.ta.com',next_page),callback=self.parse, args={"wait":3})

Это дает мне правильную информацию для start_url, но не переходит на следующую страницу.

1 Ответ

0 голосов
/ 28 января 2020

Обновление. Проблема была в том порядке, в котором у меня была соскоб с сайтов. Ниже приведен обновленный код, который работал хорошо.

import scrapy
from scrapy_splash import SplashRequest
import urllib.parse as urlparse


class TAFolio(scrapy.Spider):
    name = 'Portfolio'
    start_urls = [

    'https://www.ta.com/portfolio/business-services',
    'https://www.ta.com/portfolio/consumer',
    'https://www.ta.com/portfolio/financial-services',
    'https://www.ta.com/portfolio/healthcare',
    'https://www.ta.com/portfolio/technology'
    ]

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url=url, callback = self.parse, args={"wait" : 3})

    def parse(self, response):

        companylink = response.css('div.tiles.js-portfolio-tiles a::attr(href)').extract()
        for i in companylink:
            yield response.follow('https://www.ta.com' + str(i), callback=self.parse1)

    def parse1(self, response):

        companyname = response.css('h1.item_detail-main-info-heading::text').extract_first()
        sectors = response.css('.item_detail-main-info-group-item::text')[0].extract()
        investmentyear = response.css('.item_detail-main-info-group-item::text')[1].extract()
        status = response.css('.item_detail-main-info-group-item::text')[2].extract()
        location = response.css('.item_detail-main-info-group-item::text')[3].extract()
        region = response.css('.item_detail-main-info-group-item::text')[4].extract()
        team = response.css('div.item_detail-main-info-group a::text').extract()
        about_company = response.css('h2.item_detail-main-content-heading::text').extract()
        about_company_detail = response.css('div.markdown p::text').extract()

        yield {
        'companyname': companyname,
        'sectors': sectors,
        'investmentyear': investmentyear,
        'status': status,
        'location': location,
        'region': region,
        'team': team,
        'about_company': about_company,
        'about_company_detail' : about_company_detail
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...