BeautifoulSoup не возвращает все в Facebook - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь извлечь все страницы, которые понравились данному человеку в Facebook. Поэтому я использую Python с BeautifulSoup и selenium для автоматизации соединения.

Однако, хотя мой код работает, он на самом деле не возвращает все результаты (например, в моем профиле он возвращает только около 20% всех страниц).

Я читал, что это может быть синтаксический анализатор, используемый в BeautifulSoup, но я попробовал несколько из них (html.parser, lxml ...), и это всегда одно и то же. Может быть, это потому, что Facebook динамически генерирует страницы с помощью AJAX? Но тогда у меня есть Selenium, который должен правильно интерпретировать это! Вот мой код:

from selenium import webdriver
from bs4 import BeautifulSoup
import time

id_user = ""

driver = webdriver.Chrome()
driver.get('https://facebook.com')
driver.find_element_by_id('email').send_keys('')
driver.find_element_by_id('pass').send_keys('')
driver.find_element_by_id('loginbutton').click()
time.sleep(2)

pages_liked = "https://www.facebook.com/search/" + id_user + "/pages-liked"

driver.get(pages_liked)

soup = BeautifulSoup(driver.page_source, 'html.parser')

likes_divs = soup.find_all('a', class_="_32mo")

for div in likes_divs:
    print(div['href'].split("/?")[0])
    print(div.find('span').text)

Большое спасибо,

Лоик

1 Ответ

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

Facebook известен тем, что делает жизнь веб-скребков непростой ... Тем не менее, похоже, что вы делаете свою домашнюю работу правильно, фрагмент выглядит точно.

Начните искать «driver.page_source», что Selenium получает ... если информация там, проблема в BeautifulSoup, если нет, Facebook нашел стратегию, чтобы скрыть страницу (глядя на подпись браузера или отпечаток пальца - да, это разные понятия).

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