Доступ к нескольким тегам внутри одного тега - PullRequest
0 голосов
/ 29 марта 2020

У меня следующий HTML код для webscrap:

<ul class="item-features">
        <li>
            <strong>Graphic Type:</strong> Dedicated Card
        </li>
        <li>
            <strong>Resolution:</strong> 3840 x 2160
        </li>
        <li>
            <strong>Weight:</strong> 4.40 lbs.
        </li>
        <li>
            <strong>Color:</strong> Black
        </li>
</ul>

Я хотел бы напечатать в файле .csv все отдельные теги внутри: Graphi c Тип, Разрешение, Вес, и др c. в разных столбцах в файле .csv.

Я попробовал следующее в Python:

import bs4
from urllib.request import urlopen as req
from bs4 import BeautifulSoup as soup
url ='https://www.newegg.com/Laptops-Notebooks/SubCategory/ID-32?Tid=6740'
Client = req(url)
pagina = Client.read()
Client.close()
pagina_soup=soup(pagina,"html.parser")
productes = pagina_soup.findAll("div",{"class":"item-container})
producte = productes [0]
features = producte.findAll("ul",{"class":"item-features"})
features[0].text

И он отображает все функции, но только в одном столбце .csv.

'\nGraphic Type: Dedicated CardResolution: 3840 x 2160Weight: 4.40 lbs.Color: Black\nModel #: AERO 15 OLED SA-7US5020SH\nItem #: N82E16834233268\nReturn Policy: Standard Return Policy\n'

Я не знаю, как их экспортировать по одному. Пожалуйста, посмотрите весь мой код Pyhton:

import bs4
from urllib.request import urlopen as req
from bs4 import BeautifulSoup as soup

#Link de la pàgina on farem webscraping
url = 'https://www.newegg.com/Laptops-Notebooks/SubCategory/ID-32?Tid=6740'

#Obrim una connexió amb la pàgina web
Client = req(url)
#Offloads the content of the page into a variable
pagina = Client.read()
#Closes the client
Client.close()
#html parser
pagina_soup=soup(pagina,"html.parser")
#grabs each product
productes = pagina_soup.findAll("div",{"class":"item-container"})

#Obrim un axiu .csv
filename = "ordinadors.csv"
f=open(filename,"w")

 #Capçaleres del meu arxiu .csv
headers = "Marca; Producte; PreuActual; PreuAnterior; Rebaixa; CostEnvio 
 \n"
 #Escrivim la capçalera
 f.write(headers)

#Fem un loop sobre tots els productes
for producte in productes:

    #Agafem la marca del producte
    marca_productes = producte.findAll("div",{"class":"item-info"})
    marca = marca_productes[0].div.a.img["title"]

    #Agafem el nom del producte
    name = producte.a.img["title"] 

    #Preu Actual
    actual_productes = producte.findAll("li",{"class":"price-current"})
    preuActual = actual_productes[0].strong.text

    #Preu anterior    
    try:
        preuAbans = producte.find("li", class_="price- 
        was").next_element.strip()
    except:
        print("Not found")

    #Agafem els costes de envio
    costos_productes = producte.findAll("li",{"class":"price-ship"})
    #Com que es tracta d'un vector, agafem el primer element i el netegem.
    costos = costos_productes[0].text.strip()  

    #Writing the file
    f.write(marca + ";" + name.replace(","," ") + ";" + preuActual + ";" 
    + preuAbans + ";" + costos + "\n")

 f.close()

1 Ответ

0 голосов
/ 29 марта 2020
keys = [x.find().text for x in  pagina_soup.find_all('li')]
values = [x.find('strong').next_sibling.strip() for x in  pagina_soup.find_all('li')]
print(keys)
print(values)

out:

Out[6]: ['Graphic Type:', 'Resolution:', 'Weight:', 'Color:']
Out[7]: ['Dedicated Card', '3840 x 2160', '4.40 lbs.', 'Black']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...