鱼C论坛

 找回密码
 立即注册
查看: 1792|回复: 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的版本。
  1. py -3 -m pip show selenium
复制代码


最简单的例子如下,此时仅仅完成打开网页的功能:
  1. from selenium import webdriver

  2. driver = webdriver.Firefox()
  3. driver.get("http://www.baidu.com")
复制代码


使用selenium操作元素的常用方法有:
elem.send_keys("输入内容")
elem.click()     #鼠标单击元素
elem.clear()       #清除元素内容

更详细内容具体可以参照以下官方网站:
http://selenium-python.readthedocs.io/index.html

另外一个例子:
  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. import time

  4. '''如果调用Firefox()有问题,可以考虑加入##语句。否则直接运行即可'''
  5. ##from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
  6. ##caps = webdriver.DesiredCapabilities().FIREFOX
  7. ##caps['marionette']=True
  8. ##binary = FirefoxBinary(r'C:\Program Files\Mozilla Firefox\firefox.exe')
  9. ##driver=webdriver.Firefox(firefox_binary=binary,capabilities=caps)

  10. driver=webdriver.Firefox()
  11. driver.get("http://www.baidu.com")

  12. assert "百度一下,你就知道" in driver.title                              
  13. elem = driver.find_element_by_name("wd")
  14. elem.clear()
  15. elem.send_keys("python")
  16. elem.send_keys(Keys.RETURN)
  17. time.sleep(15)
  18. driver.close()
复制代码


driver.title   ##可以直接在网页上方看到,或者用F12查找<title>..</title>里面的内容。
assert        #断言语句,只有为True才会继续往下执行。

当然,也可以再简洁一点:
  1. from selenium import webdriver
  2. import time

  3. driver = webdriver.Firefox()
  4. driver.get("http://www.baidu.com")
  5. time.sleep(0.5)
  6. driver.find_element_by_id("kw").send_keys("python")
  7. driver.find_element_by_id("su").click()
  8. time.sleep(3)
  9. driver.quit()
复制代码


加快selenium爬取速度的三种方法:
  1. fp = webdriver.FirefoxProfile()
  2. fp.set_preference("permissions.default.stylesheet",2)  #禁止CSS的加载
  3. fp.set_preference("permissions.default.image",2)     #禁止图片的加载,看需求而定      
  4. 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-4-26 09:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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