2015-08-02 3 views
1

Я использую beautifulSoup для извлечения данных с сайта. Текст с этого сайта изменяется каждый раз, когда вы перезагружаете свою страницу, поэтому в основном я хочу уделить основное внимание имени класса как переменной Static, поскольку текст является динамическим.Python 3 - Получить текст из тега в beautifulSoup

import requests 
from bs4 import BeautifulSoup 
url = 'xxxxxxxxxxx' 
r = requests.get(url) 
soup = BeautifulSoup(r.content, 'html.parser') 
class2 = soup.find_all(True, class_="template_title") 
print (class2) 

, который печатает
<td align="left" class="template_title" height="50" valign="bottom" width="535"><div style="padding-bottom:9px;">4</div></td>
Когда перезагружается страница, я все равно буду иметь фокус на площади, но я не знаю, как печатать только текст (который в данном случае является: 4)

Как только это выясняется, у меня возникает другой вопрос: если класс содержит несколько тегов, есть ли способ получить больше статических данных, чтобы убедиться, что он только печатает текст, который я искал, а не больше? (У меня есть класс, но я мог использовать высота = «50» VALIGN = «дно» ширина = «535», а?)

ответ

1
  1. Вы можете использовать text или string атрибут элемента.

    elems = soup.find_all(True, class_='template_title') 
    print([elem.string for elem in elems]) 
    # prints `['4']` for the given html snippet 
    
  2. Укажите дополнительные атрибуты, как вы хотите:

    elems = soup.find_all(True, class_='template_title', 
             height='50', valign='bottom', width='535') 
    
+0

Благодарим за помощь! Но, скажем, я распечатываю первый раз исходный код, затем я решаю, какой тег я хочу сосредоточить (тег в моем вопросе). Я делаю ввод, который запрашивает имя класса, но если в теге класса есть более одного тега, и я не хочу менять свой код, чтобы добавить параметры. Есть ли способ для меня просто скопировать код, который я хочу сохранить (например: class = "template_title" height = "50" valign = "bottom" width = "535"), и он поместит параметры на место для ответ моего второго вопроса? Я знаю, что мой английский не на высоте, но я делаю все возможное. Еще раз спасибо за ответ: –

+0

@bob. Вместо указания в качестве аргументов ключевого слова вы также можете передавать атрибуты в виде словаря: 'soup.find_all (True, dict (class _ = 'template_title', height = '50 ', valign =' bottom ', width =' 535 ')) ', если я понял ваш вопрос. – falsetru

+0

Тогда как я могу сделать это здесь: 'string_keep = input (" params to keep ?: ")' 'class2 = soup.find_all (True, dict (string_keep))' 'для x в классе2: print (x .string) ', если мой вход:' class _ = "template_title", height = "50", valign = "bottom", width = "535" 'Я понимаю, что это похоже на то, что мой ввод - это строка, а не dict, но как я могу это исправить? Значение пользователя, выполняющего скрипт, может решить, какой параметр сохранить, если это имеет смысл –

0
  1. я обычно использую .get_text()

  2. да, вы можете

    есть метод: .find_all (имя, attrs, рекурсивная, струнные, предел, ** kwargs)

    ** kwargs: Получать что-нибудь подобное, высота, ширина VALIGN

    или

    ATTRS = { 'Высота': '50', 'VALIGN': 'bottom'}

+0

Можете ли вы расширить свой ответ? Я не уверен, чтобы понять, как они будут работать (возможно, напечатайте немного кода) Спасибо за ваш ответ :) –

Смежные вопросы