鱼C论坛

 找回密码
 立即注册
查看: 1914|回复: 2

[技术交流] Python网络爬虫连载之三 - 动态网页抓取 selenium上篇

[复制链接]
发表于 2018-1-19 09:36:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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的加载,看需求而定

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-10 23:15:24 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-12 20:17:48 | 显示全部楼层
学习了,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 00:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表