#python
#python
Вопрос:
Я пытаюсь выполнить довольно простой веб-анализ, но я хотел бы иметь возможность использовать переменные, чтобы мне не приходилось повторять код для нескольких страниц.
пример строки кода:
elems = results.find_all("span", class_="st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P")
Я бы хотел, чтобы это читалось как:
elems = results.find_all(<variable>)
и тогда пусть моя переменная будет:
'"span", class_="st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P"'
Однако, когда я делаю это, я не получаю никаких результатов. Я включил остальную часть функции ниже. Кто-нибудь знает, почему это не сработает?
РЕДАКТИРОВАТЬ: я также попытался разделить его, как показано в примере ниже, но все равно получаю ту же проблему:
elems = results.find_all(variable1 , class_=variable2)
variable1 = '"span"'
variable2 = '"st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P"'
код:
def get_name(sym,result,elem,name):
url = URL sym
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find(id=result)
elems = results.find_all(elem)
for elem in elems:
name_elem = elem.find(name)
print(name_elem.text)
get_name('top',"app",'"span",class_="st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P"','"span","st_3lrv4Jo"')
Ответ №1:
find_all
Метод принимает более одного параметра вы просто используете строку в первом аргументе метода который будет изо всех сил пытаться найти чтолибо
вам нужно будет разделить переменную на несколько, поэтому вашу переменную '"span", class_="st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P"'
нужно будет разделить на переменные elem = "span"
to и class="st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P"
и в вашем коде это будет выглядеть так elems = results.find_all(elem, class)
Еще несколько вещей:
согласно документации https://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all и то, что я могу найти в Интернете, параметр class принимает Dict со строковым массивом для нескольких значений класса, поэтому ваша функция будет выглядеть больше как
findAll(elem, {'class':['st_2XVIMK7', 'st_8u0ePN3', 'st_2oUi2Vb', 'st_3kXJm4P']})
Комментарии:
1. Я тоже пробовал это. Если вы посмотрите на
results = soup.find(id=result)
строку, вы увидите, что я ввел «id=», а затем переменную. Это было потому, что у меня там была похожая проблема. Изменение кода на что-то вродеelems = results.find_all(elem, class_=clas)
(где elem = «span» и clas = «st_2XVIMK7 st_8u0ePN3 st_2oUi2Vb st_3kXJm4P») по-прежнему не приводит к выводу2. @whileINside Я не могу комментировать непосредственно ваш пост, НО и переменные не должны
"
быть в них,variable1 = '"span"'
должны быть простоvariable1 = 'span'
и из документации, чтобы иметь несколько переменных класса, вам нужно поместить их в dict вот так{'class':['class1', 'class2']}