Тема: парсинг рекламних постів facebook
Потрібно парсити рекламні пости з стрічки новин facebook.
Вирішив зробити авторизацію через selenium і разом з тим парсити ним же.
З авторизацією проблем не виникло, а от з парсингом...
from selenium import webdriver
from time import sleep
def authorization():
usr = input('Enter Email Id: ')
pwd = input('Enter Password: ')
username_box = driver.find_element_by_id('email')
username_box.send_keys(usr)
sleep(3)
password_box = driver.find_element_by_id('pass')
password_box.send_keys(pwd)
sleep(1)
login_box = driver.find_element_by_id('loginbutton')
login_box.click()
sleep(2)
driver = webdriver.Firefox(executable_path="/home/eff1c/project/parser_fb/geckodriver") # була помилка з geckodriver, тому мусив його встановити і вказати шлях до нього
driver.get('https://www.facebook.com/') # переходим на FB
sleep(3)
authorization()
arr_post = driver.find_elements_by_class_name('_1dwg _1w_m _q7o') # дістаєм всі пости з стрічки
print(arr_post)
arr_advertising = [ads for ads in arr_post if ads.find_element_by_xpath('//div[@class="_5pcp _5lel _2jyu _232_"]/a')] # вибираємо серед постів рекламу
print(arr_advertising)
input('Press anything to quit ')
driver.quit()
print("Finished")
Спочатку збираю всі пости (по класу "_1dwg _1w_m _q7o")
При варіанті:
arr_post = driver.find_elements_by_class_name('_1dwg _1w_m _q7o')
Повертає пустий список. А якщо шукати через xpath то повертає щось типу:
[<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="a5a75724-17e9-413c-af4d-fce6a0fea62d", element="27fa7d68-f8ef-447c-ac39-ec71649ef895")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="a5a75724-17e9-413c-af4d-fce6a0fea62d", element="32c1f50a-ba80-4cea-b100-8b6cab528a55")>]
А рекламні серед них вибирав по тому, що у рекламних в тезі div з класом "_5pcp _5lel _2jyu _232_" є два тега <a> i тег <span>, а у звичайних тега <a> немає:
if ads.find_element_by_xpath('//div[@class="_5pcp _5lel _2jyu _232_"]/a')
Якщо шукав пости через xpath, то повертає аналогічний список, нічого не відфільтровувавши. Міг би спробувати не через xpath, але немає сенсу так як на вхід буде пустий список.
Зараз спробую парсити через bs4, але хотілося б дізнатись що тут не так.