2016-12-31 2 views
0

Im пытаясь соскрести веб-сайт, так что я смог извлечь весь текст, который я хотел, используя этот шаблон:Режущая часть переменной строки в Python (веб-соскоб)

nameList = bsObj.findAll("strong") 
for text in nameList: 
    string = text.get_text() 
    if "Title" in string: 
     print(text.get_text()) 

И я получаю тексты таким образом:

Название 1: textthatineed

Название 2: textthatineed

Заголовок 3: textthatineed

Название 4: textthatineed

Название 5: textthatineed

Название 6: textthatineed

Название 7: textthatineed ....

Есть ли способ, что я могу вырезать строку в python, используя beautifulsoup или любым другим способом, и получите только «textthatineed» без «title (number):».

ответ

0

Скажем, у нас есть

s = 'Title 1: textthatineed' 

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

index = s.find(':') + 2 
title = s[index:] 

Обратите внимание, что find() только возвращает индекс первого вхождения, так заголовки, содержащие двоеточие не изменяются.

+1

Да, это помогло мне, спасибо за ваше время. –

1

В Python существует очень удобная операция, которая может быть выполнена для строк, называемых slicing.

Пример взят из docs

>>> word = 'Python' 
>>> word[0:2] # characters from position 0 (included) to 2 (excluded) 
'Py' 
>>> word[2:5] # characters from position 2 (included) to 5 (excluded) 
'tho' 
>>> word[:2] + word[2:] 
'Python' 
>>> word[:4] + word[4:] 
'Python' 
>>> word[:2] # character from the beginning to position 2 (excluded) 
'Py' 
>>> word[4:] # characters from position 4 (included) to the end 
'on' 
>>> word[-2:] # characters from the second-last (included) to the end 
'on' 

Так что в вашем случае вы могли бы сделать что-то вроде этого

text = 'Title 1: important information here' 
#'Title 1: ' are the first 9 characters i.e., indices 0 through 8 
#So you need to extract the information that begins at the 9th index 
text = text[9:] 

#For general cases 
index = text.find(':') + 2 
text = text[index:] 
+0

HI @Apara, благодарю вас за ваше решение, но информация не всегда начинается с 9-го индекса, потому что она идет от Title9 до Title10 (поэтому здесь я должен начать с индекса № 10), но это было хорошее решение : index = s.find (':') + 2 title = s [index:] –

+0

Упс. Кажется, я упустил этот нюанс. Позвольте мне отредактировать мой ответ с вашей коррекцией. – Apara

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