Как извлечь номер телефона из скрипта с помощью Xpath - PullRequest
0 голосов
/ 27 октября 2019

(Scrapy) Мне нужна помощь со следующим кодом:

def parse_item(self, response):

        ml_item = MercadoItem()
        #info de producto
        ml_item['nombre'] = response.xpath('//h1[@class="title"]/text()').extract()
        ml_item['web'] = response.xpath('/html/body/div[1]/div/div/div[1]/main/div/div[1]/div[2]/div[1]/div/div[4]/a/@href').extract()
        ml_item['datos'] = response.xpath('string(/html/head/script[3]/text()').extract() 
        ml_item['direccion'] = response.xpath('/html/body/div[1]/div/div/div[1]/main/div/div[1]/div[2]/div[1]/div/span[2]/text()').extract()


        self.item_count += 1
        if self.item_count > 5:
            raise CloseSpider('item_exceeded')
        yield ml_item

ml-item ['datos'] - это сценарий, содержащий номер телефона, мне нужно извлечь только номер телефона, я пытаюсь извлечь с помощьюрегулярное выражение и XPath, но я не могу это сделать. Сценарий содержит много информации, но мне нужен только номер телефона, мне нужно извлечь его с помощью выражения регулярного выражения, потому что номер телефона меняется на следующей странице. Сценарий:

{"@context":"http://schema.org","@type":"LocalBusiness","name":"Clínica Dental Castellana 23","description":".TU CLÍNICA DENTAL DE REFERENCIA EN MADRID","telephone":"+34912298837","address":{"@type":"PostalAddress","streetAddress":"Castellana 23","addressLocality":"MADRID","addressRegion":"Madrid","postalCode":"28003"}}

1 Ответ

0 голосов
/ 27 октября 2019

Данные в вашем теге script сохраняются в формате JSON. Его можно преобразовать в данные Python с помощью встроенного модуля Python json

import json
.....


def parse_item(self, response):
    ....
    script_data = response.xpath('string(/html/head/script[3]/text()').extract()
    decoded_data = json.loads(script_data)
    ml_item['datos'] = decoded_data["telephone"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...