2016-11-14 2 views
0

Я вставил ниже некоторые данные HTML. Это не полная страница. Существует много других div и т. Д., И я не нуждаюсь. Ниже приведен наиболее подходящий раздел для этого примера.синтаксический анализ этих данных с красивым супом

<div class="prox_sub22"><a onclick="return srpVehicleNameGAEvent();" 
    data-bind="attr:{href:VehicleDetailUrl, id: GetVehicleTitleId()}, html:AN.DSF.Data.SearchObjects.GetShortenVehicleName(Year+' '+Make+' '+Model+' '+StyleName)" 
    href="/new/2016/ford/expedition-el/king ranch/1FMJK1JTXGEF06926" 
    id="Vehicle_Title_0">2016 Ford Expedition EL 4WD 4d...</a> 
</div> 
<div class="prod_vin txt11"><span data-bind="attr:{ id: GetVinLabelId()}" 
    id="VIN_Label_0">VIN:</span> 
    <span data-bind="attr:{ id: GetVehicleVinId()}, text:Vin" 
    id="Vehicle_Vin_0">1FMJK1JTXGEF06926</span> 
</div> 
<div class="prox_sub22"><a onclick="return srpVehicleNameGAEvent();" 
    data-bind="attr:{href:VehicleDetailUrl, id: GetVehicleTitleId()}, html:AN.DSF.Data.SearchObjects.GetShortenVehicleName(Year+' '+Make+' '+Model+' '+StyleName)" 
    href="/new/2017/ford/super-duty-f--250-srw/xl/1FT7W2BT3HEC24765" 
    id="Vehicle_Title_1">2017 Ford Super Duty F-250 SRW...</a> 
</div> 
<div class="prod_vin txt11"><span data-bind="attr:{ id: GetVinLabelId()}" 
    id="VIN_Label_1">VIN:</span> 
    <span data-bind="attr:{ id: GetVehicleVinId()}, text:Vin" 
    id="Vehicle_Vin_1">1FT7W2BT3HEC24765</span> 
</div> 

Я вставив только один небольшой участок HTML-файл для справки ... есть 72 (inclduing 0) из них на этой странице. Я пытаюсь пройти через эту страницу и получить все Vehicle_Vin на странице.

вот мой код

soup = BeautifulSoup(f,"html.parser") 
    stock = soup.find_all("div", attrs={"class" : "prod_vin txt11"}) 


    for j in range(0,72): 

     vinlist = [] 

     for subvins in stock: 
      vins = subvins.find_all("span", attrs={"id" : "Vehicle_Vin_{}".format(j)}) 
     for vin in vins: 
      vinlist.append(vin.string) 
     print(j,vinlist) 

Так что вопрос в том, что я получаю список NULL, когда это проходит через, и я не могу понять, почему.

Любые советы очень ценятся.

+0

Вы можете увидеть это сообщение http://stackoverflow.com/questions/6396655/parsing-html-using-beautifulsoup-in-python –

+0

Я предполагаю, что в строке отсутствует отсутствующий отступ -> для vin in vins: vinlist.append (vin.string). Этот цикл должен располагаться внутри внешнего цикла. –

+0

спасибо, что поймаете. Вы правы, я должен поместить это во внешнюю петлю. Однако почему каждый новый VIN добавляется в список, который я создал? В конце у меня должен быть список, в котором есть 72 элемента, но я только закончил список с 1 элементом в нем ?? – enderwigg

ответ

0
doc = """ 
<div class="prox_sub22"><a onclick="return srpVehicleNameGAEvent();" data-bind="attr:{href:VehicleDetailUrl, id: GetVehicleTitleId()}, html:AN.DSF.Data.SearchObjects.GetShortenVehicleName(Year+' '+Make+' '+Model+' '+StyleName)" href="/new/2016/ford/expedition-el/king ranch/1FMJK1JTXGEF06926" id="Vehicle_Title_0">2016 Ford Expedition EL 4WD 4d...</a></div> 
    <div class="prod_vin txt11"><span data-bind="attr:{ id: GetVinLabelId()}" id="VIN_Label_0">VIN:</span> <span data-bind="attr:{ id: GetVehicleVinId()}, text:Vin" id="Vehicle_Vin_0">1FMJK1JTXGEF06926</span></div> 
    <div class="prox_sub22"><a onclick="return srpVehicleNameGAEvent();" data-bind="attr:{href:VehicleDetailUrl, id: GetVehicleTitleId()}, html:AN.DSF.Data.SearchObjects.GetShortenVehicleName(Year+' '+Make+' '+Model+' '+StyleName)" href="/new/2017/ford/super-duty-f--250-srw/xl/1FT7W2BT3HEC24765" id="Vehicle_Title_1">2017 Ford Super Duty F-250 SRW...</a></div> 
    <div class="prod_vin txt11"><span data-bind="attr:{ id: GetVinLabelId()}" id="VIN_Label_1">VIN:</span> <span data-bind="attr:{ id: GetVehicleVinId()}, text:Vin" id="Vehicle_Vin_1">1FT7W2BT3HEC24765</span></div> 
""" 

from bs4 import BeautifulSoup 
import re 
soup = BeautifulSoup(doc,'lxml') 

for i in soup.find_all(id=re.compile(r"Vehicle_Title_\d+")): 
    print(i.get('id'), i.get_text(), sep='\t\t') 

out_put:

Vehicle_Title_0  2016 Ford Expedition EL 4WD 4d... 
Vehicle_Title_1  2017 Ford Super Duty F-250 SRW... 
0

я понимаю теперь, что я необходимо поставить vinlist = [] вне для J в диапазоне() петли.

Спасибо всем за вашу помощь!

Смежные вопросы