Я строю веб-скребок для получения данных с использованием Selenium и BS4. Я получаю html после полной загрузки страницы с помощью Selenium. Затем я создаю объект BeautifulSoup, используя page_source страницы, открытой в Selenium. После этого я начинаю синтаксический анализ html, чтобы найти определенные c элементы на странице. Мне нужно использовать регулярные выражения для анализа некоторых строк. Однако некоторые неразрывные пробелы (не все) обрабатываются как символы '\ xa0'. Это создает проблему с поиском регулярных выражений python (которые не обрабатывают их как пробелы).
Например, у меня есть следующая строка:
import re
import unicodedata
testString ="JM Wing\xa0- ...\xa0Transactions of the Royal Society A\xa0..., 2008 - royalsocietypublishing.org"
У меня есть попробовал несколько из следующих решений, согласно тому, что я нашел в Интернете, но ни одно из них, кажется, не работает. (Обратите внимание, что исходный html .page_source возвращает объект байтов, поэтому я попытался использовать декодирование.
testString = testString.replace(u'\xa0', u' ').encode('utf-8') #turns string into bytes
testString = testString.decode(encoding="utf-8",errors="ignore") #must be a bytes object
testString = unicodedata.normalize("NFKD", testString)
Независимо от того, что я пытаюсь, я не могу избавиться от '\ xa0 'символы и регулярные выражения не будут видеть это как пробелы. Любая идея, как я мог бы решить это? Я хотел бы, чтобы мой суп-объект был в utf-8, так как я потенциально имею дело с символами из нескольких языков. Но я действительно нужно превратить их в пробелы, чтобы я мог использовать регулярные выражения для разбора строк, которые не семантически размечены в html.
РЕДАКТИРОВАТЬ: я могу запустить следующее и получить нужную строку, но захват Скобки, кажется, не получают только часть, которую я хочу (и поэтому я получаю "-... \ ax0" и "," до и после строки).
foundString = re.search('-.*([a-zA-Z]*),',testString)[0]
this возвращает ". .. \ xa0Транзакции Королевского общества A \ xa0 ..., ". В идеале я хотел бы получить только слова" Транзакции ... Общество ", что должно указывать в скобках. Любопытно, что я могу получить только это результат с re.search (). Напротив, re.findall () просто возвращает пустая строка.