js抓取网页内容(有些网页加载时动态创建HTML内容怎么做?网页介绍 )
优采云 发布时间: 2021-11-14 01:21js抓取网页内容(有些网页加载时动态创建HTML内容怎么做?网页介绍
)
有些网页在加载时会动态创建HTML内容,只有在js代码完全执行后才会显示最终结果。如果使用传统方式抓取页面,则只能在js代码执行前获取页面上的内容。
有两种方法可以解决这个问题:
1.直接从js代码中抓取数据(执行js代码,解析js变量)。
2.用第三方库运行js,抓取运行后的最终html页面。
python中使用selenium执行js
Selenium 是一个强大的网络数据采集 工具,它最初是为网站 自动化测试而开发的。 Selenium 可以让浏览器自动加载页面,获取需要的数据,甚至可以对页面进行截图,或者判断是否对网站 进行了某些操作。
Selenium 没有浏览器,需要配合第三方浏览器使用。这里使用phantomjs工具代替真实浏览器。
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API。它完全支持网络,无需浏览器支持。它速度快,并且本机支持各种 Web 标准:DOM 处理、CSS 选择器、JSON、Canvas 和 SVG。 PhantomJS 可用于页面自动化、网络监控、网页截图和无界面测试。
将 selenium 和 phantomjs 结合在一起,您可以运行一个非常强大的爬虫,它可以处理 cookie、js、headers 以及您需要做的任何事情。
安装:
Selenium有python库,可以用pip等安装; phantomjs是一个功能齐全的“无头”浏览器,不是python库,所以不需要像其他python库一样安装,也不能用pip安装。
sudo pip install selenium
http://npm.taobao.org/dist/phantomjs/
#下载安装包(sudo apt-get install phantomjs安装的不是最新的,发现不能用)
phantomjs-2.1.1-linux-i686.tar.bz2
tar -jxvf phantomjs-2.1.1-linux-i686.tar.bz2
使用:
from selenium import webdriver
driver = webdriver.PhantomJS(executable_path='/opt/phantomjs-2.1.1-linux-i686/bin/phantomjs')
#executable_path为你的phantomjs可执行文件路径
driver.get("http://news.sohu.com/scroll/")
#或得js变量的值
r = driver.execute_script("return newsJason")
print r
#selenium在webdriver的DOM中使用选择器来查找元素,名字直接了当,by对象可使用的选择策略有:id,class_name,css_selector,link_text,name,tag_name,tag_name,xpath等等
print driver.find_element_by_tag_name("div").text
print driver.find_element_by_csss_selector("#content").text
print driver.find_element_by_id("content").text