Как извлечь мобильные имена из следующего списка с помощью PYTHON? - PullRequest
1 голос
/ 11 мая 2019

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

[<span class="a-size-medium a-color-base a-text-normal">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)</span>]

Я хочу выводить следующее:

[ Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey,Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty),Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)]

Приведенный выше список содержит только несколько элементов из моего основного списка. Я удалю несколько записей позже.

Ответы [ 3 ]

1 голос
/ 11 мая 2019

ты имеешь в виду что-то подобное?

txt = "<span class=\"a-size-medium a-color-base a-text-normal\">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class=\"a-size-medium a-color-base a-text-normal\">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class=\"a-size-medium a-color-base a-text-normal\">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class=\"a-size-medium a-color-base a-text-normal\">Huawei Honor 8X (64GB + 4GB RAM) 6.5\" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)</span>, <span class=\"a-size-medium a-color-base a-text-normal\">Huawei Honor 8X (64GB + 4GB RAM) 6.5\" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)</span>"
x = txt.split(", ")
mylist = list(dict.fromkeys(x))
list = []
for val in mylist:
    if ("</span>" in val):
        val = val[:val.rfind("</span>")]
    if ("<span class=\"a-size-medium a-color-base a-text-normal\">" in val):
        val = val[len("<span class=\"a-size-medium a-color-base a-text-normal\">"):]

    list.append(val)
0 голосов
/ 11 мая 2019

Извлеките каждый элемент в списке и загрузите в BeautifulSoup, выберите все теги span. Если у вас есть фактический список строк, я ожидаю '' заключить строки. Добавить в набор для удаления дубликатов.

from bs4 import BeautifulSoup as bs

aList = ['<span class="a-size-medium a-color-base a-text-normal">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)</span>, <span class="a-size-medium a-color-base a-text-normal">Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)</span>']
for i in aList:
    soup = bs(i, 'lxml')
    text = [item.text for item in soup.select('span')]  #list
    print(text)
    text = ','.join([item.text for item in soup.select('span')]) #comma separated string
    print(text)
0 голосов
/ 11 мая 2019
s = 'Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty),Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty),Huawei Mate SE Factory Unlocked 5.93” - 4GB/64GB Octa-core Processor| 16MP + 2MP Dual Camera| GSM Only |Grey (US Warranty), Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black), Huawei Honor 8X (64GB + 4GB RAM) 6.5" HD 4G LTE GSM Factory Unlocked Smartphone - International Version No Warranty JSN-L23 (Black)'

sp = s.split(",")
gl = []

for sk in sp:   
    gl.append(sk)

from collections import OrderedDict    
res = list(OrderedDict.fromkeys(gl))

print (res)

(Так как каждый ваш элемент повторяется после a, я использовал его в качестве разделителя. Убедитесь, что после этого правильное выравнивание) Надеюсь, это поможет

...