Selenium + Chrome 网络爬虫学习笔记(从环境搭建开始,适合新手)

在实际的网络数据抓取过程中,经常会发现一些网页内容在网页源代码中查找不到的情况,因为这些内容都是通过JavaScript动态生成的,此时,使用普通的requests库无法直接获取相关内容。这时候就需要借助于Selenium模拟人操作浏览器,从而获取动态生成的内容。Selenium是一个用于Web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。Selenium支持大多数常用浏览器,例如IE、Mozilla Firefox、Safari、Google Chrome等等。下面我们以谷歌浏览器为例,给大家简单介绍Python中如何使用Selenium访问和抓取网页内容。

1、工具下载与测试

首先,在Python中并没有内置selenium库,因此需要自己主动下载安装,过程非常简单,只需通过 pip install selenium即可。

其次,需要安装相应的浏览器驱动,对于谷歌浏览器而言,需要安装ChromeDriver。需要注意的是:Chromedriver的版本一定要与本地电脑上的Chrome版本一致,否则不起作用。如何查看本地浏览器的版本呢?可通过在浏览器中输入chrome://version/ 查看,效果如下。此时,浏览器的版本为75.0.3770.142

接着去下载对应版本的Chromedriver。通常从以下两个网址下载。

  1. http://chromedriver.storage.googleapis.com/index.html
  2. https://npm.taobao.org/mirrors/chromedriver/

打开网址,找到对应的版本,如果没有完全一样的版本,相近的版本也可以。进入文件夹,下载与本地电脑系统相同的安装文件,在此选择windows,然后将其下载到本地。 

准备好相关工具后,接下来就可以进行测了。首先导入相关模块,然后创建浏览器对象,指定驱动所在路径,接着打开任意网址,让浏览器停留一段时间。代码如下:

from selenium import webdriver
import time
driver_path = r"D:\chromedriver.exe"  # 驱动所在路径
browser = webdriver.Chrome(executable_path=driver_path)  # 打开浏览器,指定驱动路径
browser.get('https://www.baidu.com')  # 打开百度首页
time.sleep(100)  # 停留一段时间

运行上方代码,将会得到下图所示效果,浏览器显示百度首页,并有提示消息:Chrome正受到自动测试软件的控制。说明一切准备工作就绪。

2、核心对象及其方法介绍

通过browser = webdriver.Chrome()方法获取浏览器对象brower后,即可调用浏览器对象的方法实现网页跳转、网页源码获取、网页节点查找、浏览器关闭等等。

浏览器对象brower的主要方法及其含义如下:

  • get(url):打开url对应的网页资源;
  • page_source:属性,用于获取网页源代码;
  • close():关闭当前页面窗口;
  • quit():退出浏览器,关闭所有窗口;
  • save_screenshot(filename):对浏览器进行截图并保存;
  • find_element_by_id(id):根据id找到节点;
  • find_element_by_name(name):根据标签名找到节点;
  • find_element_by_class_name(class_name):根据样式名找到节点;
  • find_element_by_xpath(xpath):根据xpath匹配找到节点;
  • find_element_by_link_text(link_text):根据链接文本找到节点;
  • find_elements_by_id(id):根据id找到节点,结果为节点列表;
  • find_elements_by_name(name):根据标签名找到节点,结果为节点列表;
  • find_elements_by_class_name(class_name):根据样式名找到节点,结果为节点列表;
  • find_elements_by_xpath(xpath):根据xpath匹配找到节点,结果为节点列表;
  • find_elements_by_link_text(link_text):根据链接文本找到节点,结果为节点列表。
  • back():根据访问历史后退一页;
  • forward():根据访问历史前进一页;
  • refresh():刷新当前页面;
  • minimize_window():最小化窗口;
  • maximize_window():最大化窗口;
  • fullscreen_window():全屏显示;
  • add_cookie(cookie_dict):添加cookie,cookie以键值对保存在字典中;
  • delete_cookie(name):删除指定cookie;
  • get_cookie(name):获取指定cookie;

节点对象WebElement的主要方法及其含义如下:

  • click():单击某个节点;
  • submit():提交表单;
  • get_attribute(name):获取属性值;
  • text:获取节点内容;
  • is_selected():节点是否被选中;
  • send_keys():模拟文本框输入内容;
  • screenshot(filename):对节点内容进行截图并保存;
  • find_element_by_id(id):根据id找到节点;
  • find_element_by_name(name):根据标签名找到节点;
  • find_element_by_class_name(class_name):根据样式名找到节点;
  • find_element_by_xpath(xpath):根据xpath匹配找到节点;
  • find_element_by_css_selector(css_selector):根据样式选择器找到节点;
  • find_element_by_link_text(link_text):根据链接文本找到节点;
  • find_elements_by_id(id):根据id找到节点,结果为节点列表;
  • find_elements_by_name(name):根据标签名找到节点,结果为节点列表;
  • find_elements_by_class_name(class_name):根据样式名找到节点,结果为节点列表;
  • find_elements_by_xpath(xpath):根据xpath匹配找到节点,结果为节点列表;
  • find_elements_by_css_selector(css_selector):根据样式选择器找到节点,结果为节点列表;
  • find_elements_by_link_text(link_text):根据链接文本找到节点,结果为节点列表;

 3、简单应用案例-抓取博主的博客列表

下面通过一个简单的例子,演示使用Selenium抓取网页数据的流程,这个例子是获取CSDN中某位博主的文章标题及其链接,该博主的文章列表页面为:https://blog.csdn.net/Dream_Gao1989?spm=1001.2101.3001.5343,关键代码如下:

程序执行后,控制台打印结果如下(这里只截取了部分): 

 获取到博客的链接后,可以进一步去访问该链接,抓取博客内容,主要流程都类似,在此就不再进行下去了,感兴趣的读者可以自己去尝试,有什么问题可以在评论里交流。

相关工具和源代码,可关注微信公众号:Python资源分享,回复 CSDN 即可获取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高成珍

前行路上与你相伴!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值