欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)

程序员文章站 2022-03-03 20:01:13
目录准备工作一、webdriver部分二、定位到新页面三、提取酒店信息??这里要注意??四、输出结果五、全部代码准备工作1.pip install selenium2.配置浏览器驱动、配置其环境变量Selenium3.x调用浏览器必须有一个webdriver驱动文件Chrome驱动文件下载chromedriveFirefox驱动文件下载geckodriver具体步骤自行百度3.先确保webdriver可以正常使用一、webdriver部分要利用代码控制浏览器依次点击及修改具体代码:...



准备工作

1.pip install selenium
2.配置浏览器驱动、配置其环境变量
Selenium3.x调用浏览器必须有一个webdriver驱动文件
Chrome驱动文件下载chromedrive
Firefox驱动文件下载geckodriver
具体步骤自行百度
3.先确保webdriver可以正常使用

一、webdriver部分

要利用代码控制浏览器依次点击及修改
python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)
python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)
具体代码:

 driver = webdriver.Chrome() driver.get("https://hotel.qunar.com") # 选取城市 toCity = driver.find_element_by_xpath("//input[@tabindex='1']")#用xpath定位到城市的输入框 粘贴刚刚复制的xpath toCity.clear()#清除输入框原本的数据 toCity.send_keys("上海")#输入上海  toCity.send_keys(Keys.TAB)#输入TAB键 time.sleep(2) 

同样的方式定位到其他三个需要修改的部分:
注意定位到日期之后要多执行一步CTRL-A全选然后再删除
具体代码:

 # 选取开始日期 checkInDate = driver.find_element_by_xpath("//input[@tabindex='2']") checkInDate.click() checkInDate.send_keys(Keys.CONTROL, "a")#定位到该搜索框后执行CTRLA全选 checkInDate.send_keys(Keys.DELETE) checkInDate.send_keys("2020-10-14") # 选取结束日期 checkOutDate = driver.find_element_by_xpath("//input[@tabindex='3']") checkOutDate.click() checkOutDate.send_keys(Keys.CONTROL, "a") checkOutDate.send_keys(Keys.DELETE) checkOutDate.send_keys("2020-10-15") # 进行搜索 search = driver.find_element_by_xpath("//a[@tabindex='5']") search.click() 

注意这里的代码不要放到单独的函数里再在主函数中调用 会导致页面跳转后直接关闭浏览器

二、定位到新页面

首先页面跳转后要先定位到当前页面 本次获取这几个信息
python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)
这里我无法直接获取到当前页面的html
所以先获取当前页面的url再用基础爬虫框架进行爬取
如果不加这段代码 我当时无法定位到跳转后的页面 估计是个人问题?

 #定位到当前页面 time.sleep(2)#这句必须要有 driver.switch_to.window(driver.window_handles[0])#这里如果点击搜索后出来的是另一个页面  就改为【1】如果还是只有这一个页面就是【0】 

这是我当时只有一个页面但写成【1】的报错
python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)

三、提取酒店信息

new_url = driver.current_url
用该语句提取到当前页面的url

res = requests.get(new_url,headers = headers,cookies=cookies) text = etree.HTML(res.text) '''content = response.text
text = parsel.Selector(content)''' 

??这里要注意??

我这里一开始用text = parsel.Selector(content)解析
输出的文本就是这样 具体原因也不知道 同学用这个语句可行

python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)
后来改为
text = etree.HTML(res.text)用这个解析 如果直接输出

python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)

输出是<Element html at 0x2ba79195908>这样的
去百度 说需要加这样一句语句

#转为string text1 = html.tostring(text[0]) #编码'utf-8' text2 = HTMLParser().unescape(text1.decode('utf-8')) 

没啥用
直接用xpath语句可以直接定位到

具体代码:xpath语句

hotel_name = text.xpath('//div[@class="cont"]/p[@class="name"]/a/text()') hotel_gold = text.xpath('//div[@class="operate fl_right"]/p[@class="price_new"]/a/text()') hotel_addres = text.xpath('//div[@class="cont"]/p[@class="adress"]/text()') 

四、输出结果

这里只提取了第一页 着急交作业 先就这样吧 hiahia
python  selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)

五、全部代码

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys import time import requests from lxml import etree if __name__=='__main__': driver = webdriver.Chrome() driver.get("https://hotel.qunar.com") # 选取城市 toCity = driver.find_element_by_xpath("//input[@tabindex='1']")#用xpath定位到城市的输入框 toCity.clear()#清除输入框原本的数据 toCity.send_keys("上海")#输入上海  toCity.send_keys(Keys.TAB)#输入TAB键 time.sleep(2) # 选取开始日期 checkInDate = driver.find_element_by_xpath("//input[@tabindex='2']") checkInDate.click() checkInDate.send_keys(Keys.CONTROL, "a") checkInDate.send_keys(Keys.DELETE) checkInDate.send_keys("2020-10-14") # 选取结束日期 checkOutDate = driver.find_element_by_xpath("//input[@tabindex='3']") checkOutDate.click() checkOutDate.send_keys(Keys.CONTROL, "a") checkOutDate.send_keys(Keys.DELETE) checkOutDate.send_keys("2020-10-15") # 进行搜索 search = driver.find_element_by_xpath("//a[@tabindex='5']") search.click() #定位到当前页面 time.sleep(2) driver.switch_to.window(driver.window_handles[0]) new_url = driver.current_url
    headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36' } cookies={ 'QN1':'00005f00319829df5c702e97', 'HN1':'v1b1c8303c8baa2359ebb145a991a74a6f', 'HN2':'quzqqcqsngqlz', 'QN300':'organic', 'csrfToken':'DEKN7FH5xNSuYx6iemD47gRY7vw7IEDD', 'QN205':'organic', 'QN277':'organic', '_i':'RBTjeCcd1wEx33hRlirI_q1t88ex', '_vi':'cXbZyZ4BEOh4wBX9J1cQYcFSDw7dMnuW6r866eG6uTLr2331x2aHSq2To22tuRaNX98Df2nZGmhz0cLAr7upqmqCbdOQAIdmlWtslBHfje5IuNMQw8EFJdQqcYryaJwEVTuYNxcCm_65Ngnh_WrURpXQy7Hcm3ytO0twTZsG4AtJ', 'QN269':'4EFF41210D2E11EB8470FA163E9C4675', 'fid':'13f15660-e827-4b68-b89b-58c65d29e4ba', 'QN267':'01176786801cc3c53c8', 'QN271':'0fd118d6-0b4a-4ba3-9005-e8a223f2d096' } res = requests.get(new_url,headers = headers,cookies=cookies) text = etree.HTML(res.text) '''content = response.text
    text = parsel.Selector(content)''' hotel_name = text.xpath('//div[@class="cont"]/p[@class="name"]/a/text()') hotel_gold = text.xpath('//div[@class="operate fl_right"]/p[@class="price_new"]/a/text()') hotel_addres = text.xpath('//div[@class="cont"]/p[@class="adress"]/text()') #hotel_Dict = list(name +" "+ value +" "+ money + "起" for name, value, money in zip(hotel_name, hotel_gold, hotel_money)) print(hotel_name) print(hotel_addres) print(hotel_gold) 

想要提取所有信息,进一步优化的可以参考这篇知乎
Python+Selenium爬取去哪儿网信息

本文地址:https://blog.csdn.net/bb123116/article/details/109058975