Как очистить несколько ссылок на изображения в одной и той же позиции, если она отсутствует - PullRequest
2 голосов
/ 04 июля 2019

У меня есть экзаменационный сайт, на котором есть 2 класса, которые мне нужны (класс по теме и класс по выбору).Итак, в классе выбора (на самом деле, это выбор ответа) некоторые вопросы являются выбором изображения (4 варианта выбора изображения), поэтому я хочу очистить 4 ссылки на изображения в одной позиции в массиве (1 позиция в массиве - 1 вопрос).

И еще один вопрос для меня, как я могу очистить позицию массива, если нет изображения?

На самом деле, я буду случайным номером вопроса, чтобы получить данные в 4 массива (Тема, Выбор, темаизображение, изображение выбора), затем я получу данные из этого массива для отображения в следующих приложениях.

Вот пример вопроса и HTML-код:

<div class="cssQue"><div class="cssExTopic">ข้อที่ 38 :  <ul><li>ภาพใดแสดง เกลียวน๊อตตามแบบมาตรฐาน</li></ul></div><div class="cssExChoice"><ul><li><input type="checkbox" name="a"> 1  : <img src="./drawing_files/S190T1P249_20060124_224403_A1.jpg"></li><li><input type="checkbox" name="a"> 2  : <img src="./drawing_files/S190T1P249_20060124_224403_A2.jpg"></li><li><input type="checkbox" name="a"> 3  : <img src="./drawing_files/S190T1P249_20060124_224403_A3.jpg"></li><li><input type="checkbox" name="a"> 4  : <img src="./drawing_files/S190T1P249_20060124_224403_A4.jpg"></li><li><br></li><li> คำตอบที่ถูกต้อง :<font color="white"> 3</font></li></ul></div></div>

URL-адрес изображения, который янужно должно быть как:

https://my-project-1471674425170.firebaseapp.com/drawing/drawing_files/S190T1P249_20060124_224403_A1.jpg

1 Ответ

1 голос
/ 04 июля 2019

Если все ваши примеры похожи, то может сработать следующий подход. Это также поймает текст, связанный с каждым <li>:

from bs4 import BeautifulSoup

html = """
<div class="cssQue">
   <div class="cssExTopic">
      ข้อที่ 38 :  
      <ul>
         <li>ภาพใดแสดง เกลียวน๊อตตามแบบมาตรฐาน</li>
      </ul>
   </div>
   <div class="cssExChoice">
      <ul>
         <li><input type="checkbox" name="a"> 1  : <img src="./drawing_files/S190T1P249_20060124_224403_A1.jpg"></li>
         <li><input type="checkbox" name="a"> 2  : <img src="./drawing_files/S190T1P249_20060124_224403_A2.jpg"></li>
         <li><input type="checkbox" name="a"> 3  : <img src="./drawing_files/S190T1P249_20060124_224403_A3.jpg"></li>
         <li><input type="checkbox" name="a"> 4  : <img src="./drawing_files/S190T1P249_20060124_224403_A4.jpg"></li>
         <li><br></li>
         <li> คำตอบที่ถูกต้อง :<font color="white"> 3</font></li>
      </ul>
   </div>
</div>"""

base_url = "https://my-project-1471674425170.firebaseapp.com/"
soup = BeautifulSoup(html, "html.parser")
div = soup.find('div', class_="cssExChoice")
urls = []

for li in div.find_all('li'):
    img = li.find('img', src=True)

    # Was there an image present?
    if img:
        urls.append((li.get_text(strip=True), base_url + li.img['src'].lstrip('/.')))
    else:
        urls.append((li.get_text(strip=True), None))

# Display the results
for text, url in urls:
    print(f'"{text}" - {url}')

Предоставление вам пар текста и URL следующим образом:

"1  :" - https://my-project-1471674425170.firebaseapp.com/drawing_files/S190T1P249_20060124_224403_A1.jpg
"2  :" - https://my-project-1471674425170.firebaseapp.com/drawing_files/S190T1P249_20060124_224403_A2.jpg
"3  :" - https://my-project-1471674425170.firebaseapp.com/drawing_files/S190T1P249_20060124_224403_A3.jpg
"4  :" - https://my-project-1471674425170.firebaseapp.com/drawing_files/S190T1P249_20060124_224403_A4.jpg
"" - None
"คำตอบที่ถูกต้อง :3" - None

В вашем примере 6 <li> элементов, но только 4 имеют изображения. Возвращенный список содержит последние две записи как None.

Тема также может быть извлечена следующим образом:

div_topic = soup.find('div', class_="cssExTopic")
topic = ' - '.join(text.strip() for text in div_topic.strings if text.strip())
print(topic)

Даёт:

อที่ 38 : - ภาพใดแสดง เกลียวน๊อตตามแบบมาตรฐาน
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...