(二)selenium的实际运用

简介: 这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的


image.png

文章目录


前言

上一篇我们已经知道怎么简单使用selenium了,那么我们就从这篇博客来动手爬取网站吧。


selenium实战

这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的


打开艺龙网

网站:http://www.elong.com/

也可以直接点击这里进入:艺龙网

这里是主页

image.png


精确目标

我们的目标是,鹤壁市,所以我们应该先点击搜索框,然后把北京删掉,替换成鹤壁市,那么怎么通过selenium实现呢?

打开pycharm,新建一个叫做艺龙网的py文件,先导包:

from selenium import webdriver 
import time   # 导包
driver = webdriver.Chrome()  # 创建一个selenium的对象
driver.get("http://www.elong.com/")  
time.sleep(1)  # 打开网站,并让它睡1s,避免渲染未完成就进行下一步操作
driver.maximize_window()  # 将浏览器最大化

怎么找到搜索框呢,有很多方法,xpath,css,JavaScript,jQuery,,,因为xpath简单,所以我们只使用xpath,因为这个网站也是可以用xpath的,具体步骤是:

  1. F12,小箭头,点击搜索框image.png
  2. 点击后,找到元素中的位置,右键,复制,复制xpath

    image.png
  3. 进入pycharm中,在之前创建的py文件中添加如下代码
driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').clear()
# 将搜索框中的内容清理
  1. 在搜索框添加“鹤壁市”
driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').send_keys('鹤壁市')
  1. 点击搜索,进入下一页
time.sleep(1)
driver.find_element_by_xpath('//*[@id="hotel_sub_tabs"]/span[1]/b').click()  # 点击无关
time.sleep(1) # 避免渲染不及时导致报错
driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()  # 点击搜索
  1. 下一页
    此时我们绝望的发现,这些操作都是没用的(对这个网站没用,但是至少我们学到了点知识?)她还是北京
    image.png
    所以我们只能这样做了
    直接点击搜索,进入这个页面后再输入鹤壁(那干嘛不直接访问这个网页呢?为了我这该死的仪式感!!)
  2. 这样做,再那样做,就行了
from selenium import webdriver
import time   # 导包
driver = webdriver.Chrome()  # 创建一个selenium的对象
driver.get("http://www.elong.com/")
time.sleep(1)  # 打开网站,并让它睡1s,避免渲染未完成就进行下一步操作
driver.maximize_window()  # 将浏览器最大化
driver.find_element_by_xpath('//*[@id="domesticDiv"]/div/span[1]').click()  # 点击搜索
driver.find_element_by_xpath('//*[@id="m_searchBox"]/div[1]/label/input').clear()  # 清空搜索框内容
driver.find_element_by_xpath('//*[@id="m_searchBox"]/div[1]/label/input').send_keys('鹤壁市')  # 在搜索框输入 鹤壁市
time.sleep(1)
driver.find_element_by_xpath('//*[@id="sugContent"]/ul/li[1]/div/div[1]/div[1]/span/b').click()  # 鹤壁市
time.sleep(1)
# 只是改变了顺序,并更换了xpath语法
  1. 然后就成功的定位到了鹤壁市image.png
  2. 分析网页,找到详情页的url
    我们可以这样做:image.png
    我们发现,这个详情页每个的xpath都不相同,怎么做到把所有详情页都“照顾”得到呢?看来只能请出我们的requests来了,然后我们发现,这个只是一段URL,那怎么办?拼接咯!
  3. 通过查看响应,我们知道响应和元素是一样的,那么说明什么?我们可以通过xpath提取到我们的元素,直接请出我们的xpath选手。
from lxml import etree
import re
html_data = driver.page_source  # 将数据存入html_data
ht = ht_ht.xpath('//div[@class="to_detail"]/a/@data-link')  # 提取到url的后半段
  1. 拼接字符串形成新URL
    点进去一个详情页查看URL,发现是这样的
    image.png
    研究发现,将?issugtrace=2删去也可以运行,而我们通过xpath取到的正是后面的 /31712004/,所以:
for ur in ht:
    new_ul = 'http://www.elong.com' + ur
  1. 取到详情页URL后,就要点进去,然后再分析网页,再提取数据,然后存数据,找xpath的我就先不说了,也不难。
head = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
}
for ur in ht:
    new_ul = 'http://www.elong.com' + ur
    xiangqing_ht = requests.get(new_ul, headers=head).content.decode()        
    # 使用requests
  time.sleep(1)  # 睡1s
    ht_data = etree.HTML(xiangqing_ht) # 转为可使用xpath的HTML格式
    tingche = ht_data.xpath('//*[@id="hotelContent"]/div/dl[4]/dd/text()')  # 停车位
            if tingche == []:
                tingche = '无停车位'
            name = ht_data.xpath('/html/body/div[3]/div/div[1]/div[1]/div/h1/text()')[0]  # 酒店名字
            phine_num = ht_data.xpath('//*[@id="hotelContent"]/div/dl[1]/dd/span/text()')  # 电话
            photo_li = ht_data.xpath('/html/body/div[3]/div/div[2]/div[1]/div[2]/ul[1]/li/img/@src')  # 照片
            weizhi = ht_data.xpath('//*[@id="map"]/div[1]/div[2]/div[1]/div/div[9]/div[2]/div/p[2]/text()')  # 位置
            miaoshu = ht_data.xpath('//*[@id="hotelContent"]/div/dl[1]/dd/ul/li[2]/div/p/span[1]/text()')

然后我们就拿到了数据,接下来,这些数据怎么保存呢?可以使用字典保存到json中。我就接着上面的写了

dic = {} # 使用字典进行json存储
ic[f"{name}"] = {}
dic[f"{name}"][f"{name}停车场"] = tingche
dic[f"{name}"][f"{name}电话"] = phine_num
dic[f"{name}"][f"{name}位置"] = weizhi
dic[f"{name}"][f"{name}描述"] = miaoshu
path = f"酒店数据//{name}"
if not os.path.exists(path):
    os.mkdir(path)
# 创建酒店文件夹
for num, photo in zip(range(len(photo_li)), photo_li):
    if num > 4:
        break
    else:
        with open(f'酒店数据//{name}//{name, num + 1}.jpg', 'wb') as f:
            f.write(requests.get(photo).content)  # 将照片存进本地
with open(f"酒店数据//{name}//酒店数据.json", 'w') as f:
      f.write(str(dic))  # 将json存入文件
dic = {}  # 将字典内的数据清楚,留待下一次循环使用
  1. 数据拿到之后,还没完,我们还要爬下一页,首先需要把主页滑倒最底部
for i in range(4):  # 0 1
     time.sleep(0.5)
     j = (i + 1) * 1000  # 1000 2000
     js_ = f'document.documentElement.scrollTop={j}'
     driver.execute_script(js_)
     time.sleep(5)
  1. 回到主页面,找到下一页的xpath,点击
driver.find_element_by_xpath('//*[@id="pageContainer"]/a[9]').click()

然后,我们就进入了 下一页,然后下面就没有代码了,怎么办,怎么让代码一直运行将很多页的数据爬下来呢?有两种方法:

  1. 封装函数,并发爬取
  2. 使用循环进行爬取

然后,就没有然后了…


成功

成功拿到数据

image.png


结语

希望大家能够通过实战了解各种语法的功能,而不是死记硬背各种语法,那样你很容易忘记,其实很多学习都可以通过这种方式来学习

image.png


目录
相关文章
|
3天前
|
人工智能 自然语言处理 Shell
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
157353 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
|
5天前
|
人工智能 API 网络安全
用DeepSeek,就在阿里云!四种方式助您快速使用 DeepSeek-R1 满血版!更有内部实战指导!
DeepSeek自发布以来,凭借卓越的技术性能和开源策略迅速吸引了全球关注。DeepSeek-R1作为系列中的佼佼者,在多个基准测试中超越现有顶尖模型,展现了强大的推理能力。然而,由于其爆火及受到黑客攻击,官网使用受限,影响用户体验。为解决这一问题,阿里云提供了多种解决方案。
16987 37
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
5天前
|
并行计算 PyTorch 算法框架/工具
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
1310 8
|
13天前
|
人工智能 搜索推荐 Docker
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
DeepSeek R1 + LobeChat + Ollama:快速本地部署模型,创建个性化 AI 助手
3416 117
手把手教你使用 Ollama 和 LobeChat 快速本地部署 DeepSeek R1 模型,创建个性化 AI 助手
|
8天前
|
人工智能 自然语言处理 API
DeepSeek全尺寸模型上线阿里云百炼!
阿里云百炼平台近日上线了DeepSeek-V3、DeepSeek-R1及其蒸馏版本等六款全尺寸AI模型,参数量达671B,提供高达100万免费tokens。这些模型在数学、代码、自然语言推理等任务上表现出色,支持灵活调用和经济高效的解决方案,助力开发者和企业加速创新与数字化转型。示例代码展示了如何通过API使用DeepSeek-R1模型进行推理,用户可轻松获取思考过程和最终答案。
|
5天前
|
人工智能 自然语言处理 程序员
如何在通义灵码里用上DeepSeek-V3 和 DeepSeek-R1 满血版671B模型?
除了 AI 程序员的重磅上线外,近期通义灵码能力再升级全新上线模型选择功能,目前已经支持 Qwen2.5、DeepSeek-V3 和 R1系列模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
934 14
|
12天前
|
API 开发工具 Python
阿里云PAI部署DeepSeek及调用
本文介绍如何在阿里云PAI EAS上部署DeepSeek模型,涵盖7B模型的部署、SDK和API调用。7B模型只需一张A10显卡,部署时间约10分钟。文章详细展示了模型信息查看、在线调试及通过OpenAI SDK和Python Requests进行调用的步骤,并附有测试结果和参考文档链接。
1938 9
阿里云PAI部署DeepSeek及调用
|
9天前
|
人工智能 数据可视化 Linux
【保姆级教程】3步搞定DeepSeek本地部署
DeepSeek在2025年春节期间突然爆火出圈。在目前DeepSeek的网站中,极不稳定,总是服务器繁忙,这时候本地部署就可以有效规避问题。本文以最浅显易懂的方式带读者一起完成DeepSeek-r1大模型的本地部署。
|
12天前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。

热门文章

最新文章