Как совместить доходность - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу просмотреть относительный веб-сайт, ссылка на который приведена ниже. Мне нужны некоторые параметры, и я нашел лучшее решение, как это для меня. Но мне нужно поделить разные 2 части, и я понятия не имею, как их совместить (объединить в столбец)Вот почему мне нужна ваша помощь. Также я открыт для лучшего решения.Мне также нужно пропустить некоторые строки причина неправильной очистки. Также я не хочу добавлять несколько пустых строк.Я поделюсь выводом в виде файла.http://s7.dosya.tc/server14/tnx4u0/test.json.zip.html

Фактически это должен быть цикл таблицы внутри базового цикла.Но, чтобы показать это лучше, я сделал это сейчас.Большое спасибо

class KingsatSpider(Spider):
        name = 'kingsat'
        allowed_domains = ['https://tr.kingofsat.net/tvsat-turksat4a.php']
        start_urls = ['https://tr.kingofsat.net/tvsat-turksat4a.php']


    def parse(self, response):
        tables=response.xpath('//*[@class="fl"]/tr')
        bases=response.xpath('//table[@class="frq"]/tr')        

        for base in bases:
            yield {
            'Frekans':base.xpath('.//td[3]/text()').extract_first(),
            'Polarizasyon':base.xpath('.//td[4]/text()').extract_first(),
            'Kapsam':base.xpath('.//td[6]/a/text()').extract_first(),
            'SR':base.xpath('.//td[9]/a[1]/text()').extract_first(),
            'FEC':base.xpath('.//td[9]/a[2]/text()').extract_first(),
            }

            for table in tables:
                yield  {
                'channel' :table.xpath('.//td[3]/a/text()').extract_first(),
                'V-PID' : table.xpath('.//td[9]/text()[1]').extract_first(),
                'A-PID' : table.xpath('.//td[10]/text()[1]').extract_first(),
            }

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Страница имеет конструкцию

  • база (заголовок)
  • таблица с множеством строк
  • база (заголовок)
  • таблица с множеством строк

и т.д.

Вы получаете все заголовки в bases и все строки в tables как отдельные элементы, но вы должны получать таблицы как отдельные элементы, чтобы вы могли создавать пары (base, table), а затем вы должны получать строки из каждой таблицы и доходность с правильной base


В xpath я получаю tables без tr - поэтому я могу создавать пары (base, table-with-all-its-rows).

И тогда я могу получить строки из table и получить его с base.

Я не мог проверить это. Может быть, вам придется сначала пропустить base - zip(bases[1:], tables)

    bases = response.xpath('//table[@class="frq"]/tr')        
    tables = response.xpath('//*[@class="fl"]')

    for base, tabel in zip(bases, tables):
        rows = table.xpath('.//tr')
        for row in rows:
            yield {
                'Frekans':      base.xpath('.//td[3]/text()').extract_first(),
                'Polarizasyon': base.xpath('.//td[4]/text()').extract_first(),
                'Kapsam':       base.xpath('.//td[6]/a/text()').extract_first(),
                'SR':           base.xpath('.//td[9]/a[1]/text()').extract_first(),
                'FEC':          base.xpath('.//td[9]/a[2]/text()').extract_first(),
                'channel' :     row.xpath('.//td[3]/a/text()').extract_first(),
                'V-PID' :       row.xpath('.//td[9]/text()[1]').extract_first(),
                'A-PID' :       row.xpath('.//td[10]/text()[1]').extract_first(),
            }
0 голосов
/ 08 апреля 2019

если таблицы относятся к базам, вам просто не нужно делить их на две части, это лучший способ решить. если они не связаны друг с другом и их количество одинаковое, вы можете использовать следующий метод.

def parse(self, response):
    tables=response.xpath('//*[@class="fl"]/tr')
    bases=response.xpath('//table[@class="frq"]/tr')        
for i in range(len(bases)):
    yield {
    'Frekans':base[i].xpath('.//td[3]/text()').extract_first(),
    'A-PID' : table[i].xpath('.//td[10]/text()[1]').extract_first(),
    }

если их количество не одинаково, вы можете рассматривать их как единое целое. тогда вы можете иметь дело с этим в конвейере

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...