2015-06-09 3 views
0

Я использую BeautifulSoup для поиска введенного пользователем слова на определенной странице и выделяю все это слово. Например, я хочу выделить все слова «Финансы», которые находятся на странице 'https://support.google.com/finance/?hl=en&ei=VC8QVaH0N-acwgP36IG4AQ'.Использование BeautifulSoup и python regexp для поиска html для строки и добавления некоторых тегов

#!/usr/bin/python 
# charset=utf-8 

import urllib2 
import re 
from bs4 import BeautifulSoup 

html = urllib2.urlopen('https://support.google.com/finance/?hl=en&ei=VC8QVaH0N-acwgP36IG4AQ').read() 
soup = BeautifulSoup(html) 

matches = soup.body(text='Finance') 
for match in matches: 
    match.wrap(soup.new_tag('span', style="background-color:#FE00FE")) 
print soup 
+2

Попробуйте 'soup.body.findAll (text = 'Finance')'. Работает ли это для вас? –

+0

Делает ли [это сообщение SO] (http://stackoverflow.com/q/8936030/3832970) решить вашу проблему? Если да, этот вопрос является дубликатом. –

+0

Нет, это же первое слово «Финансы» подсвечивается в файле результатов. В своем вопросе hi хочет посмотреть, находится ли строка «Python» на странице (один или несколько раз). Но мне нужно выделить каждое слово на странице. – user2546252

ответ

0

Я нашел этот вариант регулярного выражения для выделения слов. Но в документе результата содержится разбитый javascript

import urllib2 
import re 
from bs4 import BeautifulSoup 

html = urllib2.urlopen('https://support.google.com/finance/?hl=en&ei=VC8QVaH0N-acwgP36IG4AQ').read() 
soup = BeautifulSoup(html) 

for text in soup.body.findAll(text=True): 
    if re.search(r'inance\b',text): 
     new_html = "<p>"+re.sub(r'(\w*)inance\b', r'<span style="background-color:#FF00FF">\1inance</span>', text)+"</p>" 
     new_soup = BeautifulSoup(new_html) 
     text.parent.replace_with(new_soup.p) 
print soup 
Смежные вопросы