#python #anaconda #jupyter-notebook #visual-code #html #css #javascript #http

제목lambda의 활용에 대해 질문드립니다.2024-01-10 16:08
작성자

방학 중 BeautifulSoup를 활용한 웹크롤링에 대해 공부하고 있습니다.

import requests
from bs4 import BeautifulSoup
import numpy as np

fields = []

CODES = [0, 1]

data = {'Menu': 'market_sum',
        'fieldIds': fields,
        'returnUrl': BASE_URL + str(0) + "&page=" + str(1)}
res = requests.post('https://finance.naver.com/sise/field_submit.naver', data=data)

page_soup = BeautifulSoup(res.text, 'lxml')
table_html= page_soup.select_one('div.box_type_l')
inner_data = [item.get_text().strip() for item in table_html.find_all(lambda x:(x.name == 'a' and 'title' in x.get('class', [])) or (x.name == 'td' and 'number' in x.get('class', [])))]
print(inner_data)


여기서 inner_data를 구할 때 find_all 메서드를 사용하는 데 이때 인수로 lambda를 사용합니다.

제가 틀릴 수도 있지만 lambda는 

lambda x:(x.name == 'a' and 'title' in x.get('class', [])) or (x.name == 'td' and 'number' in x.get('class', []))처럼 파라미터가 있는 경우에는 인수를 넣어야 오류가 나지 않고 작동한다고 알고 있습니다. 그런데

lambda x:(x.name == 'a' and 'title' in x.get('class', [])) or (x.name == 'td' and 'number' in x.get('class', []))의 경우에 x에 인수를 넣어주지도 않았는데 오류 없이 잘 동작을 합니다. 그래서 이것에 의문이 생겼습니다.


질문 1. 여기서 lambda는 인수를 어디서, 무엇을 받아오나요?

질문 2. 그럼 이것이 BeautifulSoup의 find_all의 특징인가요?

감사합니다.....

댓글