Использование RegEx и Beautiful Soup для поиска текста привязки - RegEx не работает должным образом - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь использовать Beautiful Soup для поиска ссылок на странице по ключевым словам в тексте, используя RegEx.

<a href="/company/05835190" onclick="javascript:_paq.push(['trackEvent', 'SearchSuggestions', 'SearchResult-1' ]);" title="View company"><strong>FOO</strong>blah blah<strong>BAR</strong>example</a>

Вот мой простой код:

raw_html = simple_get(searchString) 
searchString = ...see below...

if len(str(raw_html)) != 0:
    html = BeautifulSoup(raw_html, 'html.parser')
    companyLink = html.find_all('a', string=re.compile(searchString, 
    re.IGNORECASE))
    print(companyLink)

Давайтескажем, что текст ссылки: Foo blah blah bar:

  1. If searchString = "Foo" -> match
  2. If searchString = "Bar" -> match
  3. Если searchString = "Foo (.) * Bar" -> NO MATCH
  4. Если searchString = "Foo blah blah bar" -> NO MATCH!(Я даже скопировал текст прямо с веб-страницы)

Я пробовал companyLink = html.find_all ('a', text = re.compile (searchString, re.IGNORECASE)) - нетgo

Я пробовал companyLink = html.find_all (string = re.compile (searchString, re.IGNORECASE)) - нет go

Я пробовал companyLink = html.find_all (текст= re.compile (searchString, re.IGNORECASE)) - нет хода

Я думаю, что все четыре версии searchString должны возвращать совпадение.Я действительно хочу использовать версию 3, так как я знаю "Foo" и "Bar" и не уверен, что может быть между ними.

Есть мысли о том, что я делаю неправильно ???

1 Ответ

0 голосов
/ 11 октября 2018

ОК - вот как я это решил - спасибо @Wiktor Stribiżew за помощь в взломе кода:

<a href="/company/05835190" onclick="javascript:_paq.push(['trackEvent', 'SearchSuggestions', 'SearchResult-1' ]);" title="View company"><strong>FOO</strong>blah blah<strong>BAR</strong>example</a>

companyName = 'Foo Bar'
searchTarget = re.compile(companyName, re.IGNORECASE)
raw_html = simple_get(searchString)

if len(str(raw_html)) != 0:
#run BeautifulSoup on the page HTML
   html = BeautifulSoup(raw_html, 'html.parser')
#find all links where title='View company'
   anchorTitle = html.find_all('a', title='View company')
#convert to string, remove <strong> tags
   a_tag = str(anchorTitle).replace('<strong>', '')
#remove </strong> tags
   a_tag = a_tag.replace('</strong>', '')
#remove multiple spaces
   a_tag = re.sub('( ){2,}',' ', a_tag)
#run BeautifulSoup again on the edited string
   b_tag = BeautifulSoup(a_tag, 'html.parser')
#find link where string = 'Foo Bar'
   anchorText = b_tag.find('a', string=searchTarget)

   print(anchorText)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...