"Как подписчик, вам показывают на 80 % меньше медийной рекламы при чтении. Наши статьи, которые вы видите, в основном принадлежат местным компаниям, продвигающим местные услуги. Эти рекламные объявления позволяют местным предприятиям привлечь внимание своей целевой аудитории – местного сообщества. Важно, чтобы мы продолжали продвигать эту рекламу по мере необходимости нашего местного бизнеса. как можно больше поддержки в эти трудные времена».
Я хочу, чтобы парсер pyppeteer игнорировал классы, содержащие это сообщение, чтобы он не втягивался в результирующие данные. Глядя на "суп" сайта, кажется, что они хранятся в и , но я не могу этого понять. чтобы исключить их из очистки. Вот фрагмент моего сценария Pyppeteer.
Код: Выделить всё
if url.startswith('www.'):
url = 'https://' + url
try:
page = await browser.newPage()
await stealth(page)
# Go to the desired page and wait for resources to load
await page.goto(url, waitUntil='networkidle2', timeout=1000000)
# Execute JavaScript to remove unwanted elements
await page.evaluate('''() => {
// Function to block new windows (pop-ups)
function blockPopups() {
window.open = function() {
console.log("Blocked a popup attempt.");
};
}
blockPopups();
// Select and remove all and elements
const unwantedElements = document.querySelectorAll('nav, footer', 'header', 'menu', 'sidebar', 'ads', 'related', 'sponsored', 'comments', 'subscribe', 'social', 'popup', 'modal', 'mainfooter', 'search-form', 'bottomAd', 'modal-dialog', 'modal-lg', 'modal-content', 'modal-body', 'modal-footer');
unwantedElements.forEach(el => el.remove());
// Select and remove specific elements by their class combinations
const specificParagraphs = ['p.sc-ipEyDJ.sc-dmctIk.jsPbGk.eDQUpO', 'p.sc-ipEyDJ.sc-idXgbr.jsPbGk.hBXpo', 'p.article-comments__moderation-rules-text', 'p.delete-alert__message mar-alert__message'];
specificParagraphs.forEach(selector => {
const el = document.querySelector(selector);
if (el) {
el.remove();
}
});
// Return nothing, as content extraction will be done later in Python
}''')
# Extract content using BeautifulSoup
headings, paragraphs = await extract_content(page)`
Код: Выделить всё
const unwantedElements = document.querySelectorAll('nav, footer', 'header', 'menu', 'sidebar', 'ads', 'related', 'sponsored', 'comments', 'subscribe', 'social', 'popup', 'modal', 'mainfooter', 'search-form', 'bottomAd', 'modal-dialog', 'modal-lg', 'modal-content', 'modal-body', 'modal-footer'); unwantedElements.forEach(el => el.remove());
(Текстовое содержание страницы без содержания о рекламе)
Что на самом деле получилось:
Что я ожидал:
(Текстовое содержимое), за которым следует 'Как подписчик, вам будет показано на 80 % меньше медийной рекламы при чтении наших статей. Те объявления, которые вы видите, в основном принадлежат местным компаниям, продвигающим местные услуги. Эта реклама позволяет местному бизнесу предстать перед своей целевой аудиторией – местным сообществом. Важно, чтобы мы продолжали продвигать эту рекламу, поскольку в эти трудные времена наш местный бизнес нуждается в максимальной поддержке».
Подробнее здесь: https://stackoverflow.com/questions/787 ... teer-web-s