#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».