2015-10-16 2 views
0

Я буду анализировать множество сайтов с различными htmls, и я пытаюсь найти все строки, содержащие определенный текст (внутри html), используя BeautifulSoup.BeautifulSoup найти все вхождения определенного текста

r = requests.get(url) 
soup = BeautifulSoup(r.content, "lxml")    
for text in soup.find_all(): 
    if "price" in text: 
     print text 

Этот подход не работает (хотя «цена» упоминается более 40 раз в html). Может быть, есть еще лучший подход к этому?

+0

Есть причина, почему вы хотите использовать 'BeautifulSoup' ? Похоже, что если вы просто хотите, чтобы строки, содержащие цену, было проще смотреть напрямую в данные ответа. Какова конечная цель? – Jkdc

ответ

0

Почему не позволяют BeautifulSoup найти вам узлы, содержащие нужный текст:

for node in soup.find_all(text=lambda x: x and "price" in x): 
    print(node) 
+0

Как и идея, но код выше не работает, я изменил print (py 2.7), я забыл что-нибудь еще :)? ура –

0

Чтобы извлечь весь текст из заданного URL, вы можете просто использовать что-то вроде:

r = requests.get(url) 
soup = BeautifulSoup(r.content, "lxml")    

for element in soup.findAll(['script', 'style']): 
    element.extract() 

text = soup.get_text() 

Этом также удалит возможный нежелательный текст внутри разделов script и style. Затем вы можете искать требуемый текст, используя это.

0

вы не должны использовать красивый суп, чтобы найти конкретный текст в HTML вместо этого вы можете использовать запрос, что для бывших:

r = requests.get(url) 
if 'specific text' in r.content: 
    print r.content 
Смежные вопросы