Мне удалось сопоставить индекс заголовка с индексом текста заголовка в коде ниже. Что я не могу понять, так это добавление np.NaN, когда заголовок не в супе. Это продолжение моего предыдущего вопроса .
import pandas as pd
import requests
from bs4 import BeautifulSoup
import re
import numpy as np
def getAndParseURL(url):
result = requests.get(url)
soup = BeautifulSoup(result.text, 'html.parser')
return(soup)
urls_test = ['https://www.example.com/',
'https://www.example.com/']
engine = []
trans = []
color = []
interior = []
for url in urls_test:
soup = getAndParseURL(url)
ul = soup.select('ul[class="list-inline lot-breakdown-list"] li', recursive=True)
lis_e0 = []
lis_e1 = []
if ul:
for li in ul:
lis0 = []
lis1 = []
lis0.append(li.h5.contents[0])
lis1.append(li.contents[1])
lis_e0.extend(lis0)
lis_e1.extend(lis1)
try:
for i in range(min(len(lis_e1), len(lis_e0))):
if 'Engine' in lis_e0[i]:
engine.append(lis_e1[i])
except:
engine.append(np.NaN)
try:
for i, (x, y) in enumerate(zip(lis_e0, lis_e1)):
if 'Trans' in x:
trans.append(lis_e1[i])
except:
trans.append(np.NaN)
try:
for i, (x, y) in enumerate(zip(lis_e0, lis_e1)):
if 'Color' in x:
color.append(lis_e1[i])
except:
color.append(np.NaN)
try:
for i, (x, y) in enumerate(zip(lis_e0, lis_e1)):
if 'Interior' in x:
interior.append(lis_e1[i])
except:
interior.append(np.NaN)
else:
engine.append(np.NaN)
trans.append(np.NaN)
color.append(np.NaN)
interior.append(np.NaN)
engine
trans
color
interior
print(str(len(engine)))
print(str(len(trans)))
print(str(len(color)))
print(str(len(interior)))
Out:
['383 CI']
['Automatic']
['Green', 'Curious Yellow']
['Black', 'Black']
1
1
2
2
Ниже результата, который я ищу (для l oop для 'engine' другое, но должно работать одни и те же). Длина должна соответствовать количеству URL, иначе индексы списка не будут соответствовать правильному URL при очистке нескольких URL. Спасибо, что нашли время!
['NaN', '383 CI']
['NaN', 'Automatic']
['Green', 'Curious Yellow']
['Black', 'Black']
2
2
2
2