如何通过Selenium(Python)从博客文章中删除信息

时间:2018-05-09 03:10:42

标签: python python-3.x google-chrome selenium web-scraping

我试图通过网络搜索博客: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 = "";

博客的名称位于标题标记内,作者的ID位于var blogId = 'ssamssam48中。我目前正在通过Python与Selenium合作,但是当我尝试brower.title时,我得到了帖子的标题,但没有得到博客的标题,如源代码所示。至于作者的身份证,我完全不知道如何到达那些var部分

我还尝试以不同的方式处理信息 - 而不是查看源代码,只需查看开发人员工具栏的元素部分。在这里,您可以在包装器中找到包含xpath //*[@id="blog-profile"]/div/div[2]的部分,其中包含有关作者的信息,但是当我通过Selenium搜索它时,它说这样的元素不存在。

我认为问题的一部分可能是帖子的主体全部隐藏在这个显示#document

的网页内

enter image description here

任何人都可以帮助我获得博客的标题和作者的名字吗?另外#document中的#标签是什么意思?

2 个答案:

答案 0 :(得分:1)

检索页面标题오사카유니버셜튜오오오.. .. .. .. .. .. .. .. .. .. .. .. ..,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, >和作者姓名即(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 所需的框架为{{1} }可用然后切换到它。

为什么要等待这个框架?

虽然您已在上一步调用了网址//frame[@id='mainFrame'],但浏览器客户端(即网络浏览器)会将控件返回到<一旦https://blog.naver.com/ssamssam48/221271075217等于 'document.readyState' ,就会实现em> WebDriver 实例,它仍然不会占用所有 WebElements (例如,网页上的框架按钮)已完成加载。因此,为了特定地等待所需帧的加载完成,我们引发了"complete"方法。

您将在以下网址找到详细讨论:

答案 1 :(得分:0)

您可以使用execute_script方法直接执行此操作。

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

上面的代码打印

  

ssamssam48

您可以修改上面的代码,以获得脚本标记中定义的几乎所有js变量。

至于标题,运行print driver.title返回

  

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

考虑到您目前正在使用特定帖子,这看起来正确。如果您想要博客的标题,请考虑导航到博客的主页并运行driver.title