Python-使用Python网页抓取JavaScript页面

发布于 2021-02-02 23:24:16

我正在尝试开发一个简单的网页抓取工具。我想提取没有HTML代码的文本。我实现了这个目标,但是我发现在某些加载了JavaScript的页面中,我没有获得良好的结果。

例如,如果一些JavaScript代码添加了一些文本,则看不到它,因为当我调用

response = urllib2.urlopen(request)

我得到的原始文本没有添加文本(因为在客户端执行了JavaScript)。

因此,我正在寻找一些解决此问题的想法。

关注者
0
被浏览
302
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    一旦安装了Phantom JS,请确保phantomjs二进制文件在当前路径中可用:

    phantomjs --version
    # result:
    2.1.1
    

    举个例子,我用以下HTML代码创建了一个示例页面。

    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <title>Javascript scraping test</title>
    </head>
    <body>
      <p id='intro-text'>No javascript support</p>
      <script>
         document.getElementById('intro-text').innerHTML = 'Yay! Supports javascript';
      </script> 
    </body>
    </html>
    

    如果没有javascript,它会说:No javascript supportjavascript:Yay! Supports javascript

    没有JS支持的报废:

    import requests
    from bs4 import BeautifulSoup
    response = requests.get(my_url)
    soup = BeautifulSoup(response.text)
    soup.find(id="intro-text")
    # Result:
    <p id="intro-text">No javascript support</p>
    

    借助JS支持进行报废:

    from selenium import webdriver
    driver = webdriver.PhantomJS()
    driver.get(my_url)
    p_element = driver.find_element_by_id(id_='intro-text')
    print(p_element.text)
    # result:
    'Yay! Supports javascript'
    

    你还可以使用Python库dryscrape抓取javascript驱动的网站。

    借助JS支持进行报废:

    import dryscrape
    from bs4 import BeautifulSoup
    session = dryscrape.Session()
    session.visit(my_url)
    response = session.body()
    soup = BeautifulSoup(response)
    soup.find(id="intro-text")
    # Result:
    <p id="intro-text">Yay! Supports javascript</p>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看