首页 > 其他分享 >Selenium爬虫实践之爬取携程网北京旅游景点数据

Selenium爬虫实践之爬取携程网北京旅游景点数据

时间:2024-03-12 20:58:35浏览次数:34  
标签:score mess Selenium driver 爬虫 html dict div 携程网

昨天我发布了一篇名为Selenium在爬虫中的应用的文章,今天补充一下Selenium爬虫实践,话不多说直接上代码。

1.导包

首先导入所需要的库:

import html
import time
from lxml import html
from selenium import webdriver
from selenium.webdriver.common.by import By

 2.获取浏览器驱动

紧接着定义一个函数来获取浏览器驱动:

#获取浏览器驱动
def get_driver():
    option = webdriver.ChromeOptions()
    # 设置编码集
    option.add_argument('lang=zh_CN.UTF-8')
    driver = webdriver.Chrome(options=option)
    return driver

 3.自动登录的实现

接下来用Selenium实现自动化登录操作,这里提前把用户名和密码设置好,在网页对应的表单中通过element.send_keys("xxxxxx")方法输入用户名和密码。

这里定义一个实现自动登录操作的函数login,后续过程通过调用该函数可实现自动登录,通过find_element(By.XPATH)的方法定位到输入框,输入完账号密码后还需点击同意政策服务的选项按钮,这里的思想是一样的,操作完成后点击登录按钮即可登录。

def login(driver):
    driver.maximize_window()#最大化窗口
    #定位到登录按钮
    login_button = driver.find_element(By.XPATH, "/html/body/div[2]/div[1]/div/div/div/div/div[2]/ul/li[1]/div/button")
    login_button.click()

    username = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/form/dl[1]/dd/input")
    username.send_keys("用户名")
    password = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/form/dl[2]/dd/input")
    password.send_keys("密码")

    agree_btn = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[4]/div/div[1]/label")
    agree_btn.click()

    log_btn = driver.find_element(By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/form/dl[3]/dd/input")
    log_btn.click()

 4.数据爬取与存储

 登录成功后就开始我们的核心程序的编写,同样定义一个开始任务的函数start_task()。

通过driver.page_source的方法获取到网页信息后再用xpath进行数据解析,定义一个字典用来存储爬取到的数据,当然如果有需要可以自己定义一个存储数据的函数来将数据存储到数据库中。

这里我爬取的内容主要有四个分别是景点名称name、景区热度hotnumber、景区位置location和景点评分score,也可以根据自己需要进行增加和删除。

#元素定位与爬取数据
def start_task(driver):
    for i in range(1,5):
        #模拟下滑到底部操作
        for j in range(1,13):
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(1)


        # 获取网页信息
        resp = driver.page_source
        # 加载xpath,用于数据解析
        etree = html.etree
        xml = etree.HTML(resp)
        #定义字典存储数据
        data_dict = {}
        for k in range(1,13):
            #name:景点名称
            name = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/dl/dt/a/text()')
            if len(name) > 0:
                mess_dict['name'] = name[0]
            else:
                mess_dict['name'] = ' '

            #hotnumber:景区热度
            hotnumber = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/dl/dt/a/b[2]/text()')
            if len(hotnumber) > 0:
                try:
                    mess_dict['hotnumber'] = float(hotnumber[0])
                except:
                    mess_dict['hotnumber'] = '0.0'
                else:
                    mess_dict['hotnumber'] = 0.0


            #location:景区位置
            location = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/dl/dd/text()')
            if len(location) > 0:
                mess_dict['location'] = location[0]
            else:
                mess_dict['location'] = ' '


            #score:景点评分
            score = xml.xpath(f'//*[@class="list_mod2"]/div[{k}]/div[2]/ul/li/a/text()')
            if len(score) > 0:
                try:
                    mess_dict['score'] = float(score[0])
                except:
                    mess_dict['score'] = '0.0'
            else:
                mess_dict['score'] = 0.0
        #进行翻页操作
        next_page_btn = driver.find_element(By.XPATH, "/html/body/div[2]/div[2]/div[4]/div/div[2]/div/div[3]/div[12]/div/a[7]")
        next_page_btn.click()
        time.sleep(1)
    driver.quit()

 5.运行程序

 最后就是调用定义的函数了!!!

#加载浏览器驱动
driver = get_driver()
#指定url
url = "https://you.ctrip.com/sight/beijing1.html"
#进入页面
driver.get(url)
#登录
login(driver=driver)
#开始任务
start_task(driver=driver)

以上内容为Selenium在爬虫应用中通用的基本流程,可根据需求自己扩展添加。

标签:score,mess,Selenium,driver,爬虫,html,dict,div,携程网
From: https://blog.csdn.net/m0_73673163/article/details/136626943

相关文章

  • python爬虫scrapy之如何同时执行多个scrapy爬行任务
    来源:https://www.shanhubei.com/archives/23601.html1、顺序执行:fromscrapy.cmdlineimportexecuteexecute(['scrapy','crawl','httpbin'])2、同时进行setting=get_project_settings()process=CrawlerProcess(setting)didntWo......
  • Python爬虫学习记录1—Python基础知识
    1.type()函数:用于查看变量的数据类型print(type(a),a)2.input()函数:输入内容用户的交互程序如果没有结束,则需要输入内容注意:input接受的所有数据都是字符串,字符串如果想变成其他数据类型则需要转化3.ifPython用缩进代替判断括号缩进:捆绑同一层级别的代码,简称代码块if单分......
  • selenium知识点
    selenium知识点selenium截屏截屏方式1.save_screenshot2.get_screenshot_as_file#保存网页截图3.get_screenshot_as_png#获取二进制数据流4.get_screenshot_as_base64#base64编码原始数据全屏截屏:截屏的是可视区域driver.save_screenshot('baidu1.p......
  • 爬虫程序的实现
    0.学习爬虫的入门看的第一个视频就是手把手的讲解怎么写爬虫程序,对小白非常的友好,强烈推荐。(写新的程序就是照葫芦画瓢)【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)的Python+爬虫公开课程,从入门到(不)入狱!_哔哩哔哩_bilibili1.插件所有的爬虫程序都要用到......
  • 爬虫进阶new
    1.处理cookie为什么要处理cookie?保存客户端的相关状态在请求中携带cookie,在爬虫中如果遇到了cookie的反爬如何处理?#手动处理在抓包工具中捕获cookie,将其封装在headers中#自动处理使用session机制使用场景:动态变化的cookiesession对象:该对象和requests模块用法......
  • 多任务一次搞定!selenium自动化复用浏览器技巧大揭秘
    复用浏览器简介在Web自动化测试中,浏览器复用是指将已打开的浏览器实例用于多个测试用例。这可以显著提高测试效率和性能,并减少资源消耗。浏览器复用通常与浏览器驱动程序(如SeleniumWebDriver)一起使用,以便更好地管理浏览器窗口和标签页。常见的浏览器复用场景如下:多个测试......
  • selenium的基本使用
    1.基本使用browser.current_urlbrowser.get_cookies()browser.page_source2.定位元素fromselenium.webdriver.common.byimportByinput_first=browser.find_element(by=By.ID,value='q')input_first=browser.find_element(by=By.CSS_SELECTOR,value='......
  • 2024-selenium-问题一:java.io.IOException: Invalid Status code=403 text=Forbidden
    问题截图:  问题分析: 参考网址:https://blog.csdn.net/weixin_46739493/article/details/134163739问题解决:1、chrome版本为:版本114.0.5735.199(正式版本);driver的版本为:114.0.5735.90; java-seleium版本为:4.0.0-rc-21<dependency>2<groupId>org.......
  • pip install selenium报错 raise ReadTimeoutError--解决方法
    pipinstallselenium报错如下:raiseReadTimeoutError(self._pool,None,"Readtimedout.")pip._vendor.urllib3.exceptions.ReadTimeoutError:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):Readtimedout. 原因:timeout超时,默认15s解......
  • Selenium帮助你轻松实现浏览器多窗口操作
    多窗口处理简介元素有属性,浏览器的窗口其实也有属性的,浏览器窗口的属性用句柄(handle)来识别。每个窗口都有一个唯一的窗口句柄,该句柄在窗口创建时由操作系统分配,窗口句柄通常在窗口的生命周期内保持不变,但在某些情况下,例如窗口关闭后,句柄可能被销毁,并且操作系统可以在以后将相......