马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 payton24 于 2018-1-23 16:17 编辑
动态网页抓取的第二个方法就是使用浏览器渲染引擎,比起使用“检查”功能更为有效。
这样就可以直接用浏览器在显示网页时解析HTML、
应用CSS样式并执行JavaScript的语句。
主要使用selenium来模拟浏览器完成抓取。
Selenium是一个用于Web应用程序程序的工具,可以编写代码代码在浏览器中完成单击、输入、打开、验证等操作,
就像真正的用户在操作一样。
Selenium的安装有点麻烦,目前搭配Firefox或Chrome浏览器比较多。这里就省略了。
安装完后,可以在cmd中使用以下命令来查看Selenium的版本。py -3 -m pip show selenium
最简单的例子如下,此时仅仅完成打开网页的功能:from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
使用selenium操作元素的常用方法有:
elem.send_keys("输入内容")
elem.click() #鼠标单击元素
elem.clear() #清除元素内容
更详细内容具体可以参照以下官方网站:
http://selenium-python.readthedocs.io/index.html
另外一个例子:from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
'''如果调用Firefox()有问题,可以考虑加入##语句。否则直接运行即可'''
##from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
##caps = webdriver.DesiredCapabilities().FIREFOX
##caps['marionette']=True
##binary = FirefoxBinary(r'C:\Program Files\Mozilla Firefox\firefox.exe')
##driver=webdriver.Firefox(firefox_binary=binary,capabilities=caps)
driver=webdriver.Firefox()
driver.get("http://www.baidu.com")
assert "百度一下,你就知道" in driver.title
elem = driver.find_element_by_name("wd")
elem.clear()
elem.send_keys("python")
elem.send_keys(Keys.RETURN)
time.sleep(15)
driver.close()
driver.title ##可以直接在网页上方看到,或者用F12查找<title>..</title>里面的内容。
assert #断言语句,只有为True才会继续往下执行。
当然,也可以再简洁一点:from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com")
time.sleep(0.5)
driver.find_element_by_id("kw").send_keys("python")
driver.find_element_by_id("su").click()
time.sleep(3)
driver.quit()
加快selenium爬取速度的三种方法:fp = webdriver.FirefoxProfile()
fp.set_preference("permissions.default.stylesheet",2) #禁止CSS的加载
fp.set_preference("permissions.default.image",2) #禁止图片的加载,看需求而定
fp.set_preference("javascript.enabled",False) #禁止JavaScript的加载,看需求而定
|