python select_one 질문드립니다. 채택완료

안녕하세요.

select_one으로 거의 모든정보를 가져왔는데

아래 적색부분 url 부분만 따로 가져올수 있는지 궁금합니다.

2021/0910/202109101125338484700.jpg

아래 소스로 해보았으나 에러가 나네요

image_url           = soup.select_one('img[style="width:100%"]')['src']

 

감사합니다.

 

<div class="container mt-2">
<div class="row list-item">

<div class="col-12 col-sm-7 col-md-7 mt-2">

<div class="card card-fluid">
    <script>
            document.write('<img src="'+img_domain+'2021/0910/202109101125338484700.jpg'+'" style="width:100%">');
      </script>

        <div class="naver" style="">

         </div>
  </div> </div>   </div>   </div>  

답변 1개

채택된 답변
+20 포인트

다음과 같이 해 볼 수 있지 않을까 합니다.

 

HTML 코드에서 이미지 URL을 선택하는 방법은 이미지 태그를 직접 선택하는 것이 아니라 JavaScript 코드에서 이미지 URL을 생성하는 부분을 선택해야 합니다.

 

예를 들면 다음과 같습니다.

Copy
from bs4 import BeautifulSoup

# HTML 코드를 제공합니다.
html_code = """
<div class="container mt-2">
<div class="row list-item">
<div class="col-12 col-sm-7 col-md-7 mt-2">
<div class="card card-fluid">
    <script>
            document.write('<img src="'+img_domain+'2021/0910/202109101125338484700.jpg'+'" style="width:100%">');
      </script>
        <div class="naver" style="">
         </div>
  </div>
</div>
</div>
</div>
"""

# BeautifulSoup을 사용하여 HTML을 파싱합니다.
soup = BeautifulSoup(html_code, 'html.parser')

# JavaScript 코드 부분을 선택합니다.
script = soup.find('script')

if script:
    # JavaScript 코드에서 이미지 URL을 추출합니다.
    js_code = script.string
    img_url = js_code.split('img_domain')[1].split('" style=')[0].strip("'+")

    print(img_url)
else:
    print("이미지 URL을 찾을 수 없습니다.")

 

JavaScript 부분을 선택하고, JavaScript 코드에서 이미지 URL을 추출하는 방식으로 이렇게 하면 이미지 URL을 가져 올 수 있을 것 같습니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

안녕하세요.
소스 실행 시키니 잘되네요.
그런데 제 소스에서는 다른 script가 먼저 잡혀서 오류가 발생하네요
아래 script에서 card card-fluid 이면서 script
script = soup.find('script')
=>
script = soup.find('card card-fluid and script')
이런 형태로 안되네요?
감사합니다.

<div class="card card-fluid">
<script>
document.write('<img src="'+img_domain+'2021/0910/202109101125338484700.jpg'+'" style="width:100%">');
</script>
</div>
다음 형태로 해보시는건 어떨까 합니다.

[code]
# BeautifulSoup을 사용하여 HTML을 파싱합니다.
soup = BeautifulSoup(html_code, 'html.parser')

# 더 명확한 선택자를 사용하여 script 태그를 선택합니다.
script = soup.select_one('div.card.card-fluid script')

if script:
# JavaScript 코드에서 이미지 URL을 추출합니다.
js_code = script.string
img_url = js_code.split('img_domain')[1].split('" style=')[0].strip("'+")

print(img_url)
else:
print("이미지 URL을 찾을 수 없습니다.")
[/code]
이렇게 하면 다른 script 태그로 인한 오류를 방지하면서 원하는 script 태그를 선택할 수 있지 않을까 합니다.
정말 감사합니다.
잘 되네요

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고