Как соскрести информацию с поста в блоге через Selenium (Python) - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать блог: https://blog.naver.com/ssamssam48/221271075217

Я пытаюсь получить название блога и автора блога по указанному выше адресу. Если вы зайдете в исходный код, обе части доступны в этой части:

<title>용의주도미스고의 행복만들기♪ : 네이버 블로그</title>
</head>
<script type="text/javascript" 
src="https://ssl.pstatic.net/t.static.blog/mylog/versioning/Frameset- 
584891086_https.js" charset="UTF-8"></script>

<script type="text/javascript" charset="UTF-8">
var photoContent="";
var postContent="";

var videoId       = "";
var thumbnail     = "";
var inKey         = "";
var movieFileSize = "";
var playTime      = "";
var screenSize    = "";

var blogId = 'ssamssam48';
var blogURL = 'https://blog.naver.com';
var eventCnt = '';

var g_ShareObject = {};
g_ShareObject.referer = "";

Название блога находится внутри тегов заголовка, а идентификатор автора - var blogId = 'ssamssam48. В настоящее время я работаю с Selenium через Python, но когда я пытаюсь brower.title, я получаю название поста, но не название блога, как показано в исходном коде. Что касается идентификатора автора, я абсолютно не знаю, как добраться до этих var разделов

Я также попытался по-другому взглянуть на информацию - вместо того, чтобы смотреть на исходный код, просто смотреть на раздел элементов на панели инструментов разработчика. Здесь вы можете найти раздел внутри оболочки с xpath //*[@id="blog-profile"]/div/div[2], в котором есть информация об авторе, но когда я ищу его в Selenium, он говорит, что такого элемента не существует.

Я думаю, что часть проблемы может заключаться в том, что тело сообщения полностью скрыто в этом разделе, где написано #document

enter image description here

Может ли кто-нибудь помочь мне получить название блога и имя автора? И что означает хэштег в #document ??

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Чтобы получить Заголовок страницы , т. Е. 오사카 유니버셜 스튜디오 입장권 알뜰 구매 완전 ..: 네이버 블로그 , название блога т.е. 용의주도 미스 고 и имя автора, т.е. (ssamssam48) Вы можете использовать следующий блок кода:

  • Кодовый блок:

    # -*- coding: UTF-8 -*-
    import sys,time
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver=webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get("https://blog.naver.com/ssamssam48/221271075217")
    print(driver.title)
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@id='mainFrame']")))
    blogName = driver.find_element_by_xpath("//div[@class='nick']/strong").text
    print(blogName)
    blogAuthor = driver.find_element_by_xpath("//span[@class='itemfont col']").text
    print(blogAuthor)
    driver.quit()
    
  • Выход на консоль:

    오사카 유니버셜스튜디오 입장권 알뜰 구매 완전.. : 네이버블로그
    용의주도미스고
    (ssamssam48)
    

Обновление

В соответствии с вашим вопросом в комментариях, через WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@id='mainFrame']"))) мы вызвали официанта, который будет ждать желаемого кадра с xpath как //frame[@id='mainFrame'], а затем переключиться на него.

Зачем ждать рамки?

Поскольку вы вызывали URL https://blog.naver.com/ssamssam48/221271075217 на предыдущем шаге, хотя Browser Client (то есть Web Browser ) вернет элемент управления обратно WebDriver экземпляр, как только 'document.readyState' равен "complete", все еще не гарантируется, что все WebElements (например, frames , кнопки ) на веб-странице завершили загрузку. Поэтому, чтобы конкретно дождаться завершения загрузки нужного кадра, мы вызвали метод frame_to_be_available_and_switch_to_it().

Подробное обсуждение вы найдете в:

0 голосов
/ 09 мая 2018

Вы можете сделать это напрямую, используя метод execute_script.

driver.get('https://blog.naver.com/ssamssam48/221271075217')
print(driver.execute_script('return blogId'))

Приведенный выше код печатает

ssamssam48

Вы можете изменить приведенный выше код, чтобы получить почти все переменные js, определенные в теге script.

Что касается заголовка, запуск print driver.title возвращает

오사카 유니버셜 스튜디오 입장권 알뜰 구매 완전 ..: 네이버 블로그

Что выглядит правильно, если учесть, что вы в данный момент находитесь на определенной должности. Если вам нужен заголовок блога, попробуйте перейти на домашнюю страницу блога и запустить driver.title

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