由于淘宝网站的不断更新,以前的爬取方法都无法重现,必须需要登录淘宝网站才可以进行搜索商品。所以我们要利用 Selenium 抓取淘宝商品并用 pyquery 解析得到商品的图片、名称、价格、购买人数、店铺名称和店铺所在地信息,并将其保存到 MongoDB。在开始之前,请确保已经正确安装好 Chrome 浏览器并配置好了 ChromeDriver;另外,还需要正确安装 Python 的 Selenium 库;
首先我们研究一下爬虫入口,在这里我们是无法直接跳转到搜索页面,所以需要使用 selenium 先访问淘宝首页https://www.taobao.com
利用 webdriver.Chrome()打开淘宝首页后,通过 CSS 选择器获取输入框,塞入关键字,然后启动搜索按钮。在跳转的过程中,页面会跳转到淘宝登陆页面,所以这里我们利用 cookie 来模拟登录淘宝,这样就能跳转到商品搜索页面。
– 翻页
分析淘宝商品页面,在页面下方,有一个分页导航,其中既包括前5页的链接,也包括下一页的链接,同时还有一个输入任意页码跳转的链接。
这里商品的搜索结果一般最大都为 100 页,要获取每一页的内容,只需要将页码从 1 到 100 顺序遍历即可,页码数是确定的。所以,直接在页面跳转文本框中输入要跳转的页码,然后点击“确定”按钮即可跳转到页码对应的页面。
这里不直接点击“下一页”的原因是:一旦爬取过程中出现异常退出,比如到 50 页退出了,此时点击“下一页”时,就无法快速切换到对应的后续页面了。此外,在爬取过程中,也需要记录当前的页码数,而且一旦点击“下一页”之后页面加载失败,还需要做异常检测,检测当前页面是加载到了第几页。整个流程相对比较复杂,所以这里我们直接用跳转的方式来爬取页面。
– 提取页面信息
根据商品信息的源码,我们可以看出:每个商品都是一个 item,它们在 id 为 ‘item J_MouserOnverReq ‘下的 items 的列表中:
最后,将商品信息保存到 MongoDB,实现代码如下:
看一下 MongoDB 中的结果,如图所示。
详细代码:https://github.com/Acorn2/PythonSpider/blob/master/chapter05/taobao_selenium.py