selenium笔记:从安装到爬取去哪儿上海当日酒店

目录

本人刚刚接触Selenium,觉得还挺好玩的,据本人了解,Selenium是一个自动化监测工具,一般我们会使用Firefox、Chrome来进行浏览器的驱动,它可以对页面进行控制,对页面进行多种操作,也可以获得浏览器当前页面的源代码,实现对指定内容的爬取。话不多说,内容呈上!

一、Selenium的安装
1. 两种安装方法

在这里插入图片描述
进行安装
在这里插入图片描述 最后若是出现语句 Finishd processing dependencies for selenium==3.141.0 则表明安装成功

2. 验证是否成功

在cmd里进入到python下,import selenium 回车,没有报错说明安装成功
在这里插入图片描述

二、安装驱动

要想调用selenium包控制浏览器就要安装webdriver,可以选择下载Firefox的驱动,但是Firefox55以后Selenium IDE就不能用了,所以如果你想用火狐驱动的话,可能就要配一个低版本的火狐浏览器了。这里我下载的是Google的驱动chromedriver,详细过程如下:

1.查看Google版本

不同的版本对应不同的chromedriver,所以在下载驱动前我们要先查看自己电脑上Google浏览器的版本。
在这里插入图片描述在这里插入图片描述

2、下载驱动

http://chromedriver.storage.googleapis.com/index.html下下载对应的版本,我的Google是86.xxxx,所以对应的 我下载的86.xxxx版本的驱动
在这里插入图片描述在这里插入图片描述不要怀疑,就是只有win32位的,各个版本的也只有32位的,32位的64位也是可以用的,所以放心下载吧

3、配置环境变量

下载后解压,复制chromedriver.exe文件粘贴到Google安装路径下的Application下
这是我的安装路径:
在这里插入图片描述复制路径,添加到path下
右击“计算机”——>选择“属性”——>点击“高级系统配置”——>“环境变量”——>Path,粘贴进去

在这里插入图片描述在这里插入图片描述在这里插入图片描述

4、验证

打开cmd,输入命令chromedriver回车
在这里插入图片描述

5、测试

在程序中测试:

from selenium import webdriver
browser = webdriver.Chrome()

在这里插入图片描述成功

三、驱动页面在去哪儿网查询上海的酒店信息(这一部分主要是练习驱动)
1、大致思路

去哪儿酒店信息查询
刚刚进去的页面是这样的

在这里插入图片描述网页默认地点是“北京”,时间为当天
所以我们需要定位到地址框——>清空框——>填入目的地“上海”——>定位到“搜索”按钮——>点击按钮
在这里插入图片描述在这里插入图片描述

2、详细代码
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("https://hotel.qunar.com")#调用get()方法 来请求网页
#元素交互操作
#将关键词传入搜索框
input = browser.find_element_by_class_name('inputText')#定位到搜索框
input.clear()#原搜索框中有“北京”,所以要先清空搜索框
input.send_keys('上海')#传入地点
#点击“搜索”按钮
button = browser.find_element_by_class_name('main')#找到搜索按钮
#button.click()#点击按钮  或
#定位搜索按钮时,有可能会被填入地址栏时触动的东西所遮挡,以至于程序报错,无法点击搜索按钮,所以也可以换成这个语句
browser.execute_script("arguments[0].click();", button)#避免了按钮被遮挡
time.sleep(5)

在这里插入图片描述

四、爬取搜索下的所有酒店名称

这一部分个人的主要描述放在代码里注释了,尽可能做到详细,把我的思路都解释出来,为了使代码整体上简洁,所以对上面的代码做了调整,总的代码如下:

from selenium import webdriver
import time
from lxml import etree

#调度页面,查询上海的酒店信息
#这一部分便是对上面的代码做的微调
def contral(url):
    browser = webdriver.Chrome()
    browser.get(url)#调用get()方法 来请求网页
    input = browser.find_element_by_class_name('inputText')#定位到搜索框
    input.clear()#原搜索框中有“北京”,所以要先清空搜索框
    input.send_keys('上海')#传入地点
    time.sleep(5)
    button = browser.find_element_by_class_name('main')#找到搜索按钮
    #button.click()#点击按钮
    browser.execute_script("arguments[0].click();", button)#避免了按钮被遮挡
    time.sleep(1)
    return browser
    
#获取单个页面下酒店的名字
def get_one_page(html):
    #使用xpath方法获取内容
    html = etree.HTML(html)
    #爬取酒店名称时,我用的xpath方法,其实本人还是挺喜欢这种方法的可以偷懒
    h = html.xpath('//*[@id="hotel_lst_body"]/li/div/div[3]/p[1]/a/text()')
    #将内容用空格隔开
    hotel = " ".join(h)
    return hotel

获取指定内容的xpath时,可以采用复制偷懒
比如下面获取单个酒店名称,
在这里插入图片描述复制内容为 //*[@id=“hotel_lst_body”]/li[1]/div/div[3]/p[1]/a ,当然这只是获取单个,获取多个时,li不比添加索引

#进行页面的切换,汇总总数
def get_content(browser):
    hotels = []
    for i in range(8):
        html = browser.page_source#get_newhtml(browser)
        oneh = get_one_page(html)
        hotels.append(oneh)
        #定位到“下一页”按钮
        #这里我本来选用的find_element_by_class_name()方法但是失败了,
        #报错提醒我让我用find_element_by_css_selector()
        next_page = browser.find_element_by_css_selector('[class="next fl_right cur able"]')
        next_page.click()#点击“下一页”
        time.sleep(5)
    return hotels
if __name__ == '__main__':
    url = 'https://hotel.qunar.com'
    browser = contral(url)
    hotels = get_content(browser)
    print(hotels)#也可以保存起来

注意的点就是别忘了使用time.sleep(),我看其他资料说这个是为了模拟人操作时的进行时间,其实本人也说不上来具体什么意思,但就是少了它还真不能运行。

*~~*前路漫漫,任重而道远

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值