Python网络爬虫-模拟Ajax请求抓取微博中我们了解了Ajax的分析和抓取的方式,但是有很多的网站即使是Ajax来获取的数据,但是其Ajax接口含有很多加密参数,我们很难找出其中的规律,也就很难直接使用Ajax来抓取。
为了解决这些问题,我们可以直接使用模拟浏览器运行的方式来实现,这样就可以做到在浏览器中看到是什么样,抓取的源码就是什么样,也就是可见即可爬。这样我们就不用再去管网页内部的JavaScript用了什么算法渲染页面,不用管网页后台的Ajax接口到底有哪些参数。
Python提供了许多模拟浏览器运行的库,如Selenium、Splash等。
Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaSript动态渲染的页面来说,此种抓取方式非常有效。
下面使用Selenium来模拟浏览器操作爬取京东商城的商品信息。
1.目标
使用Selenium爬取京东商城商品信息并使用xpath解析得到商品的名称、价格、评论和店铺名称并将其写入文件保存。
2.准备工作
- Chrome浏览器
- 安装Python的Selenium库
- 在Chrome里面配置ChromeDriver
3.网页分析
人工输入京东的网址https://www.jd.com/,然后在搜索框中输入ipad点击确认,往下拉到网页底部,页面上共加载出60个有关ipad关键字的商品信息,并且在页面底部有一个分页的导航,其中既包括了前7页的链接,页包括了下一页的链接。
4.爬取流程
- 0基础url:https://www.jd.com/
- 1使用selenium模拟浏览器,定位到搜索框,输入ipad关键字,然后点击确定
- 2等待网页加载,获取网页代码
- 3解析网页源代码,获取商品信息写入文件
- 4以上流程结束,使用selenium定位到下一页的按钮,模拟点击
- 5等待网页加载,重复以上234,直到获取到所有的页面的商品信息
5.使用selenium模拟爬取流程中的12流程
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By