python+selenium实现的谷歌爬虫(超详细)

python+selenium实现的谷歌爬虫

接到一个需求,需要从谷歌图库中爬取图片。于是按照之前的爬取国内网站的图片的方法,进入谷歌图库的图片页面,打开谷歌开发者工具,选中network面板,然后翻页,以此找到返回图片地址的json数组的请求url,结果硬是找不到。在这里不得不说,国外的网站安全性比国内还是要高,国内的什么百度图库、搜狗图库、一些图片收费网站按照上面的方法轻松爬取。 既然此路不通,那就换一种方法,在此选择了使用selenium自动化测试工具来配合python完成爬虫。

1、selenium

Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操作,方便各种 Web 应用的自动化测试。   Selenium 的初衷是打造一款优秀的自动化测试工具,但是慢慢的人们就发现,Selenium 的自动化用来做爬虫正合适。我们知道,传统的爬虫通过直接模拟 HTTP 请求来爬取站点信息,由于这种方式和浏览器访问差异比较明显,很多站点都采取了一些反爬的手段,而 Selenium 是通过模拟浏览器来爬取信息,其行为和用户几乎一样,反爬策略也很难区分出请求到底是来自 Selenium 还是真实用户。而且通过 Selenium 来做爬虫,不用去分析每个请求的具体参数,比起传统的爬虫开发起来更容易。Selenium 爬虫唯一的不足是慢,如果你对爬虫的速度没有要求,那使用 Selenium 是个非常不错的选择。Selenium 提供了多种语言的支持(Java、.NET、Python、Ruby 等)。   selenium安装参照下面地址的博客,网上关于这个很多。   

2、 爬虫实现思路

selenium就是用来模拟浏览器操作的,在这里我们首先首先打开浏览器进入谷歌首页:https://www.google.com.hk/,然后找到搜索输入框,通过selenium的API得到输入框对象

input=browser.find_elements_by_xpath("//input[@class=‘gLFyf gsfi’]")[0]

接下来在输入框中写入关键字,按下enter键即会搜索

input.send_keys(“路飞”) input.send_keys(Keys.ENTER) #按下enter键

进入到上面这个页面,在点击“图片”这个超链接就进入到了谷歌图库页面

a = browser.find_element_by_xpath("//div[@id=‘hdtb-msb-vis’]/div[2]/a") a.click()

进入到页面之后,我们就可以拿到页面的html源码,找到图片的url地址,然后利用xpath或者bs4、正则等提取图片的的url 但是,这样操作之后发现我们在这个页面提取到的url数量只有三十多个,这是为什么呢?因为谷歌图库的图片是动态加载的,我们这个才是第一页,那我们该怎样才能获取到更多的数据呢?此页面的翻页是滑动页面右侧的滚动条进行翻页的,但是selenium的WebDriver驱动中没有提供对滚动条相应的方法,所以需要借助JS中的方法来控制滚动条,再通过WebDriver中的execute_script()执行JS代码。

js = “q=document.documentElement.scrollTop=1903” # 将页面滚动条往下拖 browser.execute_script(js)

总结 : 利用selenium实现的爬虫逻辑上非常简单,代码的具体实现多在网上找找资料也没什么难度。

3、完整代码

经验分享 程序员 微信小程序 职场和发展