Я пытаюсь извлечь некоторые данные из espn в виде таблицы и получить его в виде списка - PullRequest
0 голосов
/ 15 июня 2019

start_urls = http://www.espncricinfo.com/series/18679/scorecard/1144998/australia-vs-india-2nd-odi-india-in-aus-2018-19

Я очистил этот сайт и извлек результат матча (команда-победитель), а затем дал URL-адрес игрока и хочу напечатать имя игрока и стиль ватина. Моя первая проблема 1. Я не могу абстрагироваться от игрока. это под <pclass="ciPlayerinformationtxt"><b>Batting style</b> <span>Right-hand bat</span>. Мне удалось только извлечь текст «Стиль ватина». Как извлечь «Правую руку» 2. Мне не удалось вывести все извлеченные данные в виде таблицы. Результат, который я получил, был

р ссылка всего игрока http://www.espncricinfo.com/ci/content/player/326434.html

Player_name Страна Алекс Кэри Австралия
Кулдип Ядав Индия
Мохаммед Сирадж Индия
Winning_Team: Индия

class ScoreSpider(scrapy.Spider):
    name = 'score'
    allowed_domains = ['espncricinfo.com']

    def parse(self, response):
        Player_URLs=[]

        #got the result

        result= response.xpath('//div[@class="cscore_notes"]/span/text()').extract_first()
        result=result.split(" ")
        Winning_Team =result[0]

        #extracted player ulrs

        Batting_Player_URLs=response.xpath('//div[@class="cell batsmen"]/a/@href').extract()
        Bowling_Player_URLs=response.xpath('//*[@class="scorecard-section bowling"]/table/tbody/tr/td/a/@href').extract()

        #added to a list

        Player_URLs.extend(Batting_Player_URLs)
        Player_URLs.extend(Bowling_Player_URLs)
        for p in Player_URLs:
            yield Request(p,callback=self.parse_players,meta={'p':p})
            yield{'Winning_Team':Winning_Team}

    def parse_players(self,response):
        Player_name=response.xpath('//div[@class="ciPlayernametxt"]/div/h1/text()').extract_first()
        Country=response.xpath('//div[@class="ciPlayernametxt"]/div/h3/b/text()').extract_first()

        #this wont give the batting style but the 'batting style' as text
        Batting_style=response.xpath('//div[@class="ciPlayerinformationtxt"]/p/text()').extract_first()

        yield{'Player_name':Player_name,
              'Country':Country, 
              'Batting_style':Batting_style}

Мне нужны извлеченные данные в виде одной таблицы, и я хотел избежать повторения.

          yield{'Winning_Team':Winning_Team,
                'Player_name':Player_name,
                'Country':Country,
                'Batting_style':Batting_style}

Заранее спасибо

1 Ответ

0 голосов
/ 15 июня 2019

Вам необходимо настроить XPath:

batting_style = response.xpath('//p[@class="ciPlayerinformationtxt"]/b[.="Batting style"]/following-sibling::span[1]/text()').get()

ОБНОВЛЕНИЕ

for p in Player_URLs:
    yield Request(p,callback=self.parse_players,meta={'Winning_Team':Winning_Team})

и более поздних версий:

def parse_players(self,response):
    Winning_Team = response.meta["Winning_Team"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...