目的意义

爬取某地的酒店价格信息,示例使用selenium在Firefox中的使用。

来源

少部分来源于书。python爬虫开发与项目实战

构造

本次使用简易的方案,模拟浏览器访问,然后输入字段,查找,然后抓取网页中的信息。存储csv中。然后再转换为Excel,并对其中的数据进行二次处理。

代码

整个过程相当于获取网页,下载,然后粗糙的存储过程,最终完成。

不能理解的是,这样是使用了Phantomjs么。

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.common.by import By

from selenium.webdriver.support import expected_conditions as EC

import re

import csv

import time

class goWhere():

def __init__(self):

self.toCity=u'焦作'

self.driver=webdriver.Firefox()

self.driver.get("https://hotel.qunar.com/")

self.get_element()

for i in range(30):

self.get_response()

self.parser_store()

self.get_next_page()

def get_element(self):

self.elem_toCity=self.driver.find_element_by_name(u"toCity")

self.elem_fromDate=self.driver.find_element_by_name(u"fromDate")

self.elem_toDate=self.driver.find_element_by_name(u"toDate")

self.elem_search=self.driver.find_element_by_class_name('search-btn')

self.elem_toCity.clear()

self.elem_toCity.send_keys(self.toCity)

self.elem_search.click()

def get_response(self):

for i in range(5):

try:

WebDriverWait(self.driver,30).until(EC.presence_of_element_located((

By.CLASS_NAME,"item_price")))

break

except Exception as e:

self.driver.refresh()

print(e)

if(i==10):

self.driver.close()

exit()

js="window.scrollTo(0,document.body.scrollHeight);"

self.driver.execute_script(js)

time.sleep(5)

self.all=self.driver.find_elements_by_class_name("b_result_bd")

if(len(self.all)<16 or self.all[0].text==''):

self.driver.refresh()

self.get_response()

def parser_store(self):

pattern=re.compile('(.*\s?)')

for each in self.all:

each_text=re.findall(pattern, each.text)

print(each_text)

with open('text.csv','a',encoding='gb18030',newline='') as f:

f_csv=csv.writer(f,)

if len(each_text)==8:

each_text.pop(5)

if len(each_text)==6:

each_text.insert(2,'None')

f_csv.writerow(each_text)

print('finished')

def get_next_page(self):

self.nextBtn=self.driver.find_element_by_class_name('next')

self.nextBtn.click()

if __name__=='__main__':

goWhere()

print('task finish')

效果举例

二次处理的过程包括处理价格中的??,处理查看地图,处理礼品卡等字段,然后去掉起字,设定价格单元格为人民币格式。

后续

在实际操作过程中,有时网页不容易加载完成,有时加载正常。本次爬取的界面为26个左右共计780余数据。并没有完成数据爬取过程。

python爬取去哪儿网_python网络爬虫(12)去哪网酒店信息爬取相关推荐

  1. 基于python网络爬虫天气_Python网络爬虫之中国天气网

    大家好,今天我们来讲讲怎么用python对中国天气网进行爬取并且对爬取到的数据进行数据可视化的显示 这就是我们今天要爬取的内容,将中国天气网上的华北.东北等地区七天内的天气数据进行一个爬取,并且对最高 ...

  2. Python3.x 网络爬虫之淘宝模特照片信息爬取

    本文一部分代码参考网络大牛文章,在此深表感谢,如有侵犯请告知,谢谢. 本文主要是作者在学习过程中,对一些学习内容进行总结与练习,期望对后来学习者有一定的帮助. 使用的Python第三方库主要包括以下几 ...

  3. python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...

    一,尝试用BeautifulSoup抓取 先打开KFC网站门店列表页面:http://www.kfc.com.cn/kfccda/storelist/index.aspx 可以看到门店列表如下图: 打 ...

  4. Python网络爬虫数据采集实战:同花顺动态网页爬取

    前文的爬虫都建立在静态网页基础之上,首先通过请求网站url获取到网页源代码.之后对源代码进行信息提取进而存储即可,本文则针对动态网页进行数据采集,首先介绍Ajax相关理论,之后实战爬取同花顺动态网页, ...

  5. python网络爬虫基础知识_Python网络爬虫基础知识

    一.网络爬虫 网络爬虫又被称为网络蜘蛛,我们可以把互联网想象成一个蜘蛛网,每一个网站都是一个节点,我们可以使用一只蜘蛛去各个网页抓取我们想要 的资源.举一个最简单的例子,你在百度和谷歌中输入'Pyth ...

  6. python sub 不区分大小写_Python网络爬虫入门篇

    1. 预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. Python入门篇:https://www.cnblo ...

  7. python网络爬虫的方法有几种_Python网络爬虫过程中5种网页去重方法简要介绍

    一般的,我们想抓取一个网站所有的URL,首先通过起始URL,之后通过网络爬虫提取出该网页中所有的URL链接,之后再对提取出来的每个URL进行爬取,提取出各个网页中的新一轮URL,以此类推.整体的感觉就 ...

  8. python网络爬虫文献综述_python网络爬虫综述

    本文主要是个人python学习过程中的碎碎念想,希望对感兴趣的童鞋有所帮助. 百度百科上网络爬虫的定义是:"网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者 ...

  9. 爬虫推特数据分析的外文文献_什么是网络爬虫?有什么用?怎么爬?看完这篇文章你就明白了...

    源:Python架构师 https://dwz.cn/LI7NNc4g 一.什么是网络爬虫 随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要.互联网中的数据是海量的,如何自动高效地获取互联网 ...

最新文章

  1. ruoyi后台管理系统分析(三)---admin包
  2. [原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇)...
  3. Python继承,子类调用父类的两(2)种方法
  4. Qt Creator建立一个通用项目
  5. C++ dlopen mini HOWTO 一篇非常好的介绍C++ dlopen linux/mac os x 编程的资料
  6. python中变量不需要事先声明_第二章 Python 变量
  7. redis zset转set 反序列化失败_Redis只往zset有序集合添加不存在的数据:关键字索引查询构建+源码分析...
  8. php 字符串hash比较,分析两个 url 查询字符串和 hash 的区别
  9. mybatis连接mysql url_MyBatis与JDBC连接数据库所使用的url之间的差异
  10. linux shell将字符串分割数组
  11. 数据分析软件界面设计
  12. 输入地点名可以直接查询该位置的经度纬度(结合百度地图)
  13. 网页报表等无法打印提示网页上有错误的解决办法
  14. js 详解es6 let TDZ(暂时性死区)
  15. 揭露!华为HR实名控诉:不要相信HR,他们不诚信!
  16. 特斯拉又撞“人”了 汽车激光雷达“盛宴”开启
  17. 关于python中面向对象(一)
  18. TypeError: catching classes that do not inherit from BaseException is not allowed
  19. 基于slurm框架的GPU服务器集群搭建方法
  20. 计算机网络(七) | 应用层:HTTPS协议

热门文章

  1. Linux ALSA 之八:ALSA ASOC Platform Driver
  2. HDU 4200 Bad Wiring(高斯消元)
  3. STC12C5A60S2单片机IO口工作…
  4. C# 安捷伦 Agilent 34401A 通讯(含数据手册)
  5. 举个栗子!Tableau 技巧(193):创建箭头环形进度图
  6. 一组数据证明 歪果仁根本不用PC玩游戏
  7. 动态规划之 铺砖问题
  8. js字符串转对象----分隔符
  9. 模板引擎art-template应用 案例 ---- 学生档案管理
  10. 最全泰尔指数合集-分省、地级市、产业结构泰尔指数计算模板(部分更新2020年)