2016-12-14 3 views
0

Я пытаюсь очистить LinkedIn, используя селен. Вот страница, например: https://www.linkedin.com/vsearch/p?firstName=markPython: web scraping pages with js

Я могу видеть в HTML, что результаты поиска находятся в:

<div id='results-col'> ... </div>

, но когда я пытаюсь открыть тег с помощью BeautifulSoup:

browser = webdriver.PhantomJS(executable_path=PATH) 
browser.get(url) 
bs_obj = BeautifulSoup(browser.page_source, "html.parser") 
results_col = bs_obj.find("div", {"id": "results-col"}) 

Я ничего не получаю (results_col = None). Что я делаю неправильно?

+0

Добавить сон после browser.get ибо JS для загрузки – Tobey

ответ

2

Wait for the desired element присутствовать и только после этого получить исходный код страницы:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

# ... 
browser.get(url) 

wait = WebDriverWait(browser, 10) 
wait.until(EC.presence_of_element_located((By.ID, "results-col"))) 

bs_obj = BeautifulSoup(browser.page_source, "html.parser") 
+0

Я попробовал ваш код, но я получаю: Traceback (самый последний вызов последний): Файл X, строка 142, в печати (get_link_to_profile (search_url)) файла X, строки 121, в get_link_to_profile wait.until (EC.presence_of_element_located ((By.ID, "результаты, цв"))) Файл «C: \ Users \ sergeyy \ AppData \ Roaming \ Python \ Python35 \ site-packages \ selenium \ we bdriver \ support \ wait.py ", строка 80, до raise TimeoutException (сообщение, экран, stacktrace) selenium.common.exceptions.TimeoutException: Message: Скриншот: доступен через экран –

+0

@BobSacamano, который может означать разные вещи, но у вас нет этого элемента на странице, открытой с помощью PhantomJS. Возьмите скриншот с методом 'take_screenshot()' после загрузки страницы и посмотрите, что на самом деле открыто. Возможно, вам придется запустить 'PhantomJS' с некоторыми аргументами, чтобы заставить его работать: http://stackoverflow.com/questions/29463603/phantomjs-returning-empty-web-page-python-selenium. – alecxe

+0

@BobSacamano или вам может потребоваться настроить пользовательский агент, чтобы притвориться другим браузером: https://coderwall.com/p/9jgaeq/set-phantomjs-user-agent-string. – alecxe