2012-01-23 4 views
1

Использование beautfiulsoup разобрать исходный код для соскабливания:Python Regular Expression строка исключение

tempSite = preSite+'/contact_us/' 
print tempSite 
theTempSite = urlopen(tempSite).read() 
currentTempSite = BeautifulSoup(theTempSite) 
lightwaveEmail = currentTempSite('input')[7] 

#<input type="Hidden" name="bb_recipient" value="[email protected]" /> 

Как я могу re.compile lightwaveEmail так, что только [email protected] печатается?

ответ

2

Считается, что это неправильный путь. Причина в том, что вы используете нумерованные индексы, чтобы найти тег, который вы хотите - BeautifulSoup найдет для вас теги на основе их тега или атрибутов, что делает его намного проще.

Вы хотите что-то вроде

tempSite = preSite+'/contact_us/' 
print tempSite 
theTempSite = urlopen(tempSite).read() 
soup = BeautifulSoup(theTempSite) 
tag = soup.find("input", { "name" : "bb_recipient" }) 
print tag['value'] 
+0

мечения и отнесение сильно помогает, но я до сих пор не совсем получаю выход я ищу: В этом случае теперь печать [<входной тип = «Hidden» name = "bb_recipient" value = "[email protected]" />] - Я хочу явно связать поле значения как единственный выход. – Hikalea

+0

Урп .. проверьте обновление .. – synthesizerpatel

+0

'.findAll()' возвращает список. Используйте 'soup.find ('input', dict (name =" bb_recipient ", value = True))', чтобы получить первый найденный элемент. – jfs

0

Если вопрос заключается в том, чтобы получить значение атрибута из объекта тега, то вы можете использовать его в качестве словаря:

lightwaveEmail['value'] 

Вы можете найти более подробную информацию об этом в BeautifulSoup documentation.

Если вопрос заключается в том, чтобы найти в супе все input теги с таким значением, то вы можете искать их следующим образом:

soup.findAll('input', value=re.compile(r'[email protected]')) 

Вы можете найти подобный пример и в BeautifulSoup documentation.