Я пытаюсь написать оператор If Elif Else и, возможно, подхожу к нему неправильно. Я создал DataFrame с помощью Pandas, и я пытаюсь указать в столбце 1 из 3 статусов. Специальный заказ, готов к отправке, и просто пробел или дефис. Я пробовал это несколькими разными способами, но не могу заставить его работать. Что я пытаюсь сделать, так это если что-то имеет цену 0,00 долл. США, чтобы вернуть этот третий статус, просто пустой или дефис. В настоящее время независимо от того, что я делаю, я получаю либо специальный заказ, либо готовый к отправке.

Это код с веб-сайта, прошу прощения, он настолько беспорядочный, что он просто был отформатирован с них.

   <table cellspacing="0" class="item width-100" summary="Wish list">
            <tr>
              <td><input type="checkbox" name="wish_products" value="583454" class="wish_check  available " /></td>
              <td class="image">
                <a title="A Walk Through Hell Complete Hc" href="/a-walk-through-hell-complete-hc.html">
                                      <img src="https://www.cheapgraphicnovels.com/images/P/A%20WALK%20THROUGH%20HELL%20COMPLETE%20HC.jpg" width="97" alt="A WALK THROUGH HELL COMPLETE HC" title="A WALK THROUGH HELL COMPLETE HC" />                                  </a>
              </td>
              <td class="details">

                                <a title="A Walk Through Hell Complete Hc" href="/a-walk-through-hell-complete-hc.html" class="product-title">A WALK THROUGH HELL COMPLETE HC</a>

                <div class="descr"><p>
    <span style="font-size:14px;">Garth Ennis&#39; Complete Masterpiece of Terror in One Unrelenting Hardcover! So these two FBI agents walk into a warehouse... Special Agents Shaw and McGregor handle the routine cases nowadays, which is just the way Shaw likes it.</span></p>
<p>
    &nbsp;</p>
<p>
    <strong><span style="font-size:14px;">ESTIMATED ARRIVAL: TBA</span></strong></p>
</div>
        
                                  <span class="product-price-text">
                    <span class="currency">$29.99</span> x <input type="text" size="3" name="quantity" id="qty_583454" value="1" /> = 
                  </span>
                  <span class="price">
                    <span class="currency">$29.99</span>
                  </span>
                  <span class="market-price">
                    
                  </span>
 
              </td>
            </tr>
            <tr><td>&nbsp;</td>
              <td class="buttons-row">

    <a class="simple-button simple-delete-button" href="cart.php?mode=wldelete&amp;wlitem=583454&amp;eventid=" title="Delete item"><span>Delete item</span></a>
    
              </td>
              <td class="buttons-row">

  <button class="button light-button" type="submit" title="Update">
  <span class="button-right"><span class="button-left">Update</span></span>
  </button>

                  <div class="button-separator"></div>
                            
<div style="float:left"> 
        <a href="javascript://" onclick="javascript: self.location = 'cart.php?mode=wl2cart&amp;wlitem=583454&amp;amount='+$('#qty_583454').val()"><img src="/skin/common_files/images/add_cart_btn_hov.png" border="0" alt="" /></a>
    </div>
                                     
              </td>
            </tr>

                                     <tr>
              <td>&nbsp;</td>
                <td colspan="2">                 
<div class="ordernow">This title is available by Special Order only.  Please read our <a href="/covid-19.html">COVID-19 Update</a> prior to ordering.</div>
                </td>
              </tr>

                          <tr>
                <td>&nbsp;</td>
                <td>
                                  </td>
              </tr>
            
          </table>
          
          <table cellspacing="0" class="item width-100" summary="Wish list">
            <tr>
              <td><input type="checkbox" name="wish_products" value="584040" class="wish_check " /></td>
              <td class="image">
                <a title="Abe Sapien Dark And Terrible Vol 01 Hc" href="/abe-sapien-dark-and-terrible-vol-01-hc.html">
                                      <img src="https://www.cheapgraphicnovels.com/images/P/ABE%20SAPIEN%20DARK%20%26%20TERRIBLE%20HC%20VOL%2001.jpg" width="98" alt="ABE SAPIEN DARK AND TERRIBLE VOL 01 HC " title="ABE SAPIEN DARK AND TERRIBLE VOL 01 HC " />                                  </a>
              </td>
              <td class="details">

                                <a title="Abe Sapien Dark And Terrible Vol 01 Hc" href="/abe-sapien-dark-and-terrible-vol-01-hc.html" class="product-title">ABE SAPIEN DARK AND TERRIBLE VOL 01 HC </a>

                <div class="descr"><p>
    <span style="font-size:14px;">On the run from the BPRD, a newly mutated Abe Sapien-more inhuman than before-travels across a United States transformed and overrun by monsters. Abe&#39;s search for the truth about himself-or his race away from his fate-mirrors the quest of an ancient necromancer to seize control of a world literally going to hell. </span></p>
</div>
       
                                  <span class="product-price-text">
                    <span class="currency">$24.49</span> x <input type="text" size="3" name="quantity" id="qty_584040" value="0" /> = 
                  </span>
                  <span class="price">
                    <span class="currency">$0.00</span>
                  </span>
                  <span class="market-price">
                    
                  </span>
                
                                  <strong>Out of stock</strong>
                
              </td>
            </tr>
            <tr><td>&nbsp;</td>
              <td class="buttons-row">

    <a class="simple-button simple-delete-button" href="cart.php?mode=wldelete&amp;wlitem=584040&amp;eventid=" title="Delete item"><span>Delete item</span></a>
   
              </td>
              <td class="buttons-row">

  <button class="button light-button" type="submit" title="Update">
  <span class="button-right"><span class="button-left">Update</span></span>
  </button>

                  <div class="button-separator"></div>
                
                
              </td>
            </tr>
    
                          <tr>
                <td>&nbsp;</td>
                <td>
                                  </td>
              </tr>
            
          </table>

Пока это мой код, он работает, я просто не могу заставить часть If, Elif, Else работать по специальному заказу.

titles = []
links = []
price = []
special_order = []
addtocart = []

soup = BeautifulSoup(driver.page_source, "html.parser")
cgn_items = soup.find_all('table', class_='item width-100')
sleep(randint(2,10))

for container in cgn_items:

    #name
    name = container.find('a', class_='product-title').text.strip()
    titles.append(name)
    
    #link
    link = container.find('td', attrs={'class' : 'details'})
    for div in link:
        linking = container.find('a')['href']
        link = "https://www.cheapgraphicnovels.com" + linking
    links.append(link)
    
    #price
    pricing = container.find('span', class_='price')
    if pricing:
        price.append(pricing.text.strip())
    else:
        price.append('-')
    
    #special order
    special = container.find('div', class_='ordernow')
    if special:
        special_order.append('Special Order')
    else:
        special_order.append('Ready to Ship')
    
    #addtocart
    cart = container.find('img', {"src" : "/skin/common_files/images/add_cart_btn_hov.png"})
    if cart:
        addtocart.append('In Stock')
    else:
        addtocart.append('Out of Stock')

cgn_wishlist = pd.DataFrame({
'book': titles,
'link': links,
'price': price,
'special_order': special_order,
'cart': addtocart
})

cgn_wishlist.to_csv('cgn_wishlist.csv', index=False)

В настоящее время он работает, если находит класс ordernow, который ему известен для назначения Special Order, для всего остального он просто готов к отправке. Но я бы хотел, чтобы все, что имеет цену 0,00 долларов США, было пустым или знаком «-», а остальные товары (которые будут считаться в наличии, так как их цена превышает 0,00 долларов США) получили бы «Готово к отправке».

Любая помощь в этом будет принята с благодарностью, спасибо!

1
JacobRyan 1 Мар 2021 в 04:31

1 ответ

Лучший ответ

Насколько я могу судить, вам просто нужно добавить дополнительный elif в свой код "специального заказа" следующим образом:

#special order
special = container.find('div', class_='ordernow')
if special:
    special_order.append('Special Order')
elif price[-1] in ['-', '$0.00']:
    special_order.append('-')
else:
    special_order.append('Ready to Ship')

Это проверяет, равна ли цена - или $0.00, а затем вместо этого добавляет -.

Это должно дать вам фрейм данных, например:

                    book                   link   price  special_order          cart
0  A WALK THROUGH HEL...  https://www.cheapg...  $29.99  Special Order      In Stock
1  ABE SAPIEN DARK AN...  https://www.cheapg...   $0.00              -  Out of Stock

price - ваш список цен, последняя запись в списке - price[-1], отрицательные значения начинаются с конца списка (price[0] будет первым значением). Оператор Python in проверяет, соответствует ли значение какому-либо значению из списка. Поскольку у вас есть два теста, их можно превратить в список значений для тестирования, например ['-', '$0.00']

1
Martin Evans 1 Мар 2021 в 14:59