Python爬虫实战之用selenium爬取某旅游网站

一、selenium实战

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

二、打开艺龙网

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

这里是主页

三、精确目标

我们的目标是,鹤壁市,所以我们应该先点击搜索框,然后把北京删掉,替换成鹤壁市,那么怎么通过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,小箭头,点击搜索框

2.点击后,找到元素中的位置,右键,复制,复制xpath

3.进入pycharm中,在之前创建的py文件中添加如下代码

driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').clear()
# 将搜索框中的内容清理

4.在搜索框添加“鹤壁市”

driver.find_element_by_xpath('//*[@id="domesticDiv"]/dl[1]/dd/input').send_keys('鹤壁市')

5.点击搜索,进入下一页

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()  # 点击搜索

6.下一页
此时我们绝望的发现,这些操作都是没用的(对这个网站没用,但是至少我们学到了点知识?)她还是北京

所以我们只能这样做了
直接点击搜索,进入这个页面后再输入鹤壁(那干嘛不直接访问这个网页呢?为了我这该死的仪式感!!)这样做,再那样做,就行了

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语法

然后就成功的定位到了鹤壁市

8.分析网页,找到详情页的url
我们可以这样做

我们发现,这个详情页每个的xpath都不相同,怎么做到把所有详情页都“照顾”得到呢?看来只能请出我们的requests来了,然后我们发现,这个只是一段URL,那怎么办?拼接咯!

9.通过查看响应,我们知道响应和元素是一样的,那么说明什么?我们可以通过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的后半段

10.拼接字符串形成新URL

点进去一个详情页查看URL,发现是这样的

研究发现,将?issugtrace=2删去也可以运行,而我们通过xpath取到的正是后面的 /31712004/,所以:

for ur in ht:
    new_ul = 'http://www.elong.com' + ur

11.取到详情页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 = {}  # 将字典内的数据清楚,留待下一次循环使用

12.数据拿到之后,还没完,我们还要爬下一页,首先需要把主页滑倒最底部

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)

13.回到主页面,找到下一页的xpath,点击

driver.find_element_by_xpath('//*[@id="pageContainer"]/a[9]').click()

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

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

然后,就没有然后了…

四、成功

成功拿到数据

结语

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

到此这篇关于Python爬虫实战之用selenium爬取某旅游网站的文章就介绍到这了,更多相关Python selenium爬取网站内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧! 所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取. 运行效果: http://photo.hupu.com/nba/tag/马刺 http://photo.hupu.com/nba/tag/陈露 源代码: # -*- coding: utf

  • Python使用Selenium+BeautifulSoup爬取淘宝搜索页

    使用Selenium驱动chrome页面,获得淘宝信息并用BeautifulSoup分析得到结果. 使用Selenium时注意页面的加载判断,以及加载超时的异常处理. import json import re from bs4 import BeautifulSoup from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.com

  • python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

    基本思路: 首先用开发者工具找到需要提取数据的标签列 利用xpath定位需要提取数据的列表 然后再逐个提取相应的数据: 保存数据到csv: 利用开发者工具找到下一页按钮所在标签: 利用xpath提取此标签对象并返回: 调用点击事件,并循环上述过程: 最终效果图: 代码: from selenium import webdriver import time import re class Douyu(object): def __init__(self): # 开始时的url self.start

  • Python进阶之使用selenium爬取淘宝商品信息功能示例

    本文实例讲述了Python进阶之使用selenium爬取淘宝商品信息功能.分享给大家供大家参考,具体如下: # encoding=utf-8 __author__ = 'Jonny' __location__ = '西安' __date__ = '2018-05-14' ''' 需要的基本开发库文件: requests,pymongo,pyquery,selenium 开发流程: 搜索关键字:利用selenium驱动浏览器搜索关键字,得到查询后的商品列表 分析页码并翻页:得到商品页码数,模拟翻页

  • Python selenium爬取微博数据代码实例

    爬取某人的微博数据,把某人所有时间段的微博数据都爬下来. 具体思路: 创建driver-----get网页----找到并提取信息-----保存csv----翻页----get网页(开始循环)----...----没有"下一页"就结束, 用了while True,没用自我调用函数 嘟大海的微博:https://weibo.com/u/1623915527 办公室小野的微博:https://weibo.com/bgsxy 代码如下 from selenium import webdrive

  • python爬取企查查企业信息之selenium自动模拟登录企查查

    最近接了个小项目需要批量搜索企查查上的相关企业并把指定信息保存到Excel文件中,由于企查查需要登录后才能查看所有搜索到的信息所以第一步需要模拟登录企查查. python模拟登录企查查最重要的是自动拖拽验证插件 先介绍下项目中使用到的工具与库 Python的selenium库: Web应用程序测试的工具,Selenium可以模拟用户在浏览器中的操作,就像真实用户使用一样. 官方技术文档:https://www.selenium.dev/selenium/docs/api/py/index.htm

  • python selenium爬取斗鱼所有直播房间信息过程详解

    还是分析一下大体的流程: 首先还是Chrome浏览器抓包分析元素,这是网址:https://www.douyu.com/directory/all 发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作 分析斗鱼的翻页,有一个下一页按钮,是个li,class="dy-Pagination-item-custom" ,但是当烦到最后一页的时候,class="dy-Pagination-di

  • Python爬虫实战之用selenium爬取某旅游网站

    一.selenium实战 这里我们只会用到很少的selenium语法,我这里就不补充别的用法了,以实战为目的 二.打开艺龙网 可以直接点击这里进入:艺龙网 这里是主页 三.精确目标 我们的目标是,鹤壁市,所以我们应该先点击搜索框,然后把北京删掉,替换成鹤壁市,那么怎么通过selenium实现呢? 打开pycharm,新建一个叫做艺龙网的py文件,先导包: from selenium import webdriver import time # 导包 driver = webdriver.Chro

  • Python爬虫实战之使用Scrapy爬取豆瓣图片

    使用Scrapy爬取豆瓣某影星的所有个人图片 以莫妮卡·贝鲁奇为例 1.首先我们在命令行进入到我们要创建的目录,输入 scrapy startproject banciyuan 创建scrapy项目 创建的项目结构如下 2.为了方便使用pycharm执行scrapy项目,新建main.py from scrapy import cmdline cmdline.execute("scrapy crawl banciyuan".split()) 再edit configuration 然后

  • Python爬虫实战之虎牙视频爬取附源码

    目录 知识点 开发环境 分析目标url 开始代码 最开始还是线导入所需模块 数据请求 获取视频标题以及url地址 获取视频id 保存数据 调用函数 运行代码,得到数据 知识点 爬虫基本流程 re正则表达式简单使用 requests json数据解析方法 视频数据保存 开发环境 Python 3.8 Pycharm 爬虫基本思路流程: (重点) [无论任何网站 任何数据内容 都是按照这个流程去分析] 1.确定需求 (爬取的内容是什么东西?) 都通过开发者工具进行抓包分析 分析视频播放url地址 是

  • python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解

    这篇博客是自己<数据挖掘与分析>课程讲到正则表达式爬虫的相关内容,主要简单介绍Python正则表达式爬虫,同时讲述常见的正则表达式分析方法,最后通过实例爬取作者的个人博客网站.希望这篇基础文章对您有所帮助,如果文章中存在错误或不足之处,还请海涵.真的太忙了,太长时间没有写博客了,抱歉~ 一.正则表达式 正则表达式(Regular Expression,简称Regex或RE)又称为正规表示法或常规表示法,常常用来检索.替换那些符合某个模式的文本,它首先设定好了一些特殊的字及字符组合,通过组合的&

  • Python爬虫实现的根据分类爬取豆瓣电影信息功能示例

    本文实例讲述了Python爬虫实现的根据分类爬取豆瓣电影信息功能.分享给大家供大家参考,具体如下: 代码的入口: if __name__ == '__main__': main() #! /usr/bin/python3 # -*- coding:utf-8 -*- # author:Sirius.Zhao import json from urllib.parse import quote from urllib.request import urlopen from urllib.reque

  • Python爬虫入门教程01之爬取豆瓣Top电影

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 基本开发环境 Python 3.6 Pycharm 相关模块的使用 requests parsel csv 安装Python并添加到环境变量,pip安装需要的相关模块即可. 爬虫基本思路 一.明确需求 爬取豆瓣Top250排行电影信息 电影名字 导演.主演 年份.国家.类型 评分.评价人数 电影简介 二.发送请求 Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模

  • Python爬虫教程使用Scrapy框架爬取小说代码示例

    目录 Scrapy框架简单介绍 创建Scrapy项目 创建Spider爬虫 Spider爬虫提取数据 items.py代码定义字段 fiction.py代码提取数据 pipelines.py代码保存数据 settings.py代码启动爬虫 结果展示 Scrapy框架简单介绍 Scrapy框架是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,我们只需要少量的代码就能够快速抓取数据. 其框架如下图

  • python爬虫之教你如何爬取地理数据

    一.shapely模块 1.shapely shapely是python中开源的针对空间几何进行处理的模块,支持点.线.面等基本几何对象类型以及相关空间操作. 2.point→Point类 curve→LineString和LinearRing类: surface→Polygon类 集合方法分别对应MultiPoint.MultiLineString.MultiPolygon 3.导入所需模块 # 导入所需模块 from shapely import geometry as geo from s

  • Python爬虫实战之爬取某宝男装信息

    目录 知识点介绍 实现步骤 1. 分析目标网站 2. 获取单个商品界面 3. 获取多个商品界面 4. 获取商品信息 5. 保存到MySQL数据库 完整代码 知识点介绍 本次爬取用到的知识点有: 1. selenium 2. pymysql 3  pyquery 实现步骤 1. 分析目标网站 1. 打开某宝首页, 输入"男装"后点击"搜索", 则跳转到"男装"的搜索界面. 2. 空白处"右击"再点击"检查"审

  • Python爬虫实战案例之爬取喜马拉雅音频数据详解

    前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一起期待吧!! 这个案例的视频地址在这里 https://v.douyu.com/show/a2JEMJj3e3mMNxml 项目目标 爬取喜马拉雅音频数据 受害者地址 https://www.ximalaya.com/ 本文知识点: 1.系统分析网页性质 2.多层数据解析 3.海量音频数据保存 环境

随机推荐