【问题标题】:How to scrape information off of a blog post via Selenium (Python)如何通过 Selenium (Python) 从博客文章中抓取信息
【发布时间】:2018-10-19 01:49:15
【问题描述】:

我正在尝试抓取博客:https://blog.naver.com/ssamssam48/221271075217

我正在尝试在上面的 url 中获取博客的名称和博客的作者。如果你进入源代码,这部分信息都可以得到:

<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 时,我得到了帖子的标题,但没有得到源代码中显示的博客标题。至于作者的ID,我完全不知道如何到达那些var 部分

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

我认为部分问题可能是帖子的正文全部隐藏在此网页部分中,上面写着#document

谁能帮我得到博客的标题和作者的名字?还有#document 中的标签是什么意思??

【问题讨论】:

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


    【解决方案1】:

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

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

    上面的代码打印出来

    ssamssam48

    你可以修改上面的代码来获取几乎所有在script标签中定义的js变量。

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

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

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

    【讨论】:

      【解决方案2】:

      要检索 页面标题오사카 유니버셜스튜디오 입장권 알뜰 구매 완전.. : 네이버블로그,博客名称 ie 용의의오 입장권 알뜰 구매 완전.. > 和作者姓名即 (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)
        

      更新

      根据您在 cmets 中的问题,我们通过WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@id='mainFrame']"))) 引入了一个服务员,该服务员将等待所需的 framexpath 作为//frame[@id='mainFrame'] 可用然后切换到它。

      为什么要等待帧?

      正如您在上一步中调用了 url https://blog.naver.com/ssamssam48/221271075217 尽管 Browser Client(即 Web 浏览器)会将控件返回给 WebDriver 实例一旦 'document.readyState' 等于 "complete" 实现,它仍然不能保证所有的 WebElements(例如 frames, buttons) 已完成加载。因此,为了专门等待所需帧的加载完成,我们引入了frame_to_be_available_and_switch_to_it() 方法。

      您将在以下位置找到详细讨论:

      【讨论】:

      • 嗨!谢谢这工作得很好!如果您不介意,您能否解释一下 'WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@id='mainFrame']")))' 部分发生了什么, 请??为什么我不能直接进入那个网页元素?
      • @Chae 查看我的答案更新,如果有任何其他问题,请告诉我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多