как использовать soup.find_all(), предоставляющий ссылки, начинающиеся с sometext

#python #web-scraping #beautifulsoup

#python #очистка веб-страниц #beautifulsoup

Вопрос:

Я пытаюсь очистить этот веб-сайт, [введите описание ссылки здесь][1]

[1]: https://beta.sam.gov/search ?ключевые слова=amp;sort=-ModifiedDateamp;index=oppamp;is_active=trueamp;page=1 все данные, которые я хочу очистить, будут вставлены в div, класс которого каждый раз получает динамическое значение. что я хочу, чтобы найти все эти divs с помощью soup.find_all() и предоставить начальную строку для своего класса.

это мой текущий код,

 outerDivs = soup.find_all(attrs={"tabindex": "-1", "class": "ng-tns-c1-1 ng-star-inserted"})
 

что я хочу получить, так это найти все () divs, имеющие атрибут tabindex=1 и класс начинается с ng-tns-... ng-star-inserted . единственное значение, которое изменяется, появляется после ng-tns … прямо сейчас похоже ng-tns-c294-1 ng-star-inserted , что please note ng-star-inserted всегда остается неизменным.

вот как я получаю код soup.

        driver.get(
            f'https://beta.sam.gov/search?keywords=amp;sort=-modifiedDateamp;index=oppamp;is_active=trueamp;page={currentpage}')
        WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div#search-results")))
        source = driver.page_source
        soup = BeautifulSoup(source, 'lxml')
 

текущая страница увеличивается на единицу каждый раз, чтобы перейти к следующей странице

Комментарии:

1. Вы пробовали использовать регулярное выражение?

2. @goalie1998 , на самом деле, я этого не делал, потому что я не знаю регулярных выражений, во-вторых, я не знаю, как использовать его с find_all(), предоставляющим множество атрибутов. Я буду признателен за вашу помощь

3. распечатайте все атрибуты с использованием elem.attrs.values() и посмотрите, как они вызываются для их получения

4. @ArtyomVancyan Я не смог получить ваши инструкции

5. Как вы получаете html, запросы, urllib, selenium …?

Ответ №1:

Я не лучший с регулярными выражениями, поэтому может быть лучший способ сделать это, но это должно сработать:

 soup.find_all(attrs={"tabindex": "-1", "class": re.compile("^ng-tns.*ng-star-inserted$")})
 

Он будет соответствовать только классу, который начинается конкретно с «ng-tns», содержит любое количество символов, а затем заканчивается конкретно на «ng-star-inserted».