目的意义

爬取某地的酒店价格信息,示例使用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网络爬虫(12)去哪网酒店信息爬取的更多相关文章

  1. Python开发爬虫之BeautifulSoup解析网页篇:爬取安居客网站上北京二手房数据

    目标:爬取安居客网站上前10页北京二手房的数据,包括二手房源的名称.价格.几室几厅.大小.建造年份.联系人.地址.标签等. 网址为:https://beijing.anjuke.com/sale/ B ...

  2. Python 爬虫练手项目—酒店信息爬取

    from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...

  3. [Python3网络爬虫开发实战] 7-动态渲染页面爬取

    在前一章中,我们了解了Ajax的分析和抓取方式,这其实也是JavaScript动态渲染的页面的一种情形,通过直接分析Ajax,我们仍然可以借助requests或urllib来实现数据爬取. 不过Jav ...

  4. Python网络爬虫笔记(一):网页抓取方式和LXML示例

    (一)   三种网页抓取方法 1.    正则表达式: 模块使用C语言编写,速度快,但是很脆弱,可能网页更新后就不能用了. 2.    Beautiful Soup 模块使用Python编写,速度慢. ...

  5. 《精通Python网络爬虫》|百度网盘免费下载|Python爬虫实战

    <精通Python网络爬虫>|百度网盘免费下载|Python爬虫实战 提取码:7wr5 内容简介 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引 ...

  6. Python网络爬虫入门篇

    1.  预备知识 学习者需要预先掌握Python的数字类型.字符串类型.分支.循环.函数.列表类型.字典类型.文件和第三方库使用等概念和编程方法. 2. Python爬虫基本流程 a. 发送请求 使用 ...

  7. 学习推荐《精通Python网络爬虫:核心技术、框架与项目实战》中文PDF+源代码

    随着大数据时代的到来,我们经常需要在海量数据的互联网环境中搜集一些特定的数据并对其进行分析,我们可以使用网络爬虫对这些特定的数据进行爬取,并对一些无关的数据进行过滤,将目标数据筛选出来.对特定的数据进 ...

  8. 【学习笔记】PYTHON网络爬虫与信息提取(北理工 嵩天)

    学习目的:掌握定向网络数据爬取和网页解析的基本能力the Website is the API- 1 python ide 文本ide:IDLE,Sublime    Text集成ide:Pychar ...

  9. Python网络爬虫:空姐网、糗百、xxx结果图与源码

    如前面所述,我们上手写了空姐网爬虫,糗百爬虫,先放一下传送门: Python网络爬虫requests.bs4爬取空姐网图片Python爬虫框架Scrapy之爬取糗事百科大量段子数据Python爬虫框架 ...

随机推荐

  1. [题解] [TJOI2011] 构造矩阵

    题面 题解 很容易看出来是道网络流的题目, 要是没有这个字典序最小, 直接建图跑一遍就好了, 考虑如何输出字典序最小的方案 我们可以贪心地去选择, 若当前点可以选0就选0, 不能选0就选1, 有一点像 ...

  2. Leetcode题目22.括号生成(动态规划-中等)

    题目描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "( ...

  3. LVS分析

    概述 LVS是章文嵩博士十几年前的开源项目,已经被何如linux kernel 目录十几年了,可以说是国内最成功的kernle 开源项目, 在10多年后的今天,因为互联网的高速发展LVS得到了极大的应 ...

  4. FinalCutPro快捷键

    FinalCutPro快捷键使用 FinalCutPro的快捷键使用十分有用,特对一些基本的快捷键进行了总结 1)i:截取片段开始Initial 2)o: 截取片段结束Over i和o可以在一个素材片 ...

  5. php laravel左连接leftJoin多条where语句

    通常情况下我们在做leftjoin连接时需要对不止一个条件进行进行匹配,这时候就需要使用闭包方式,如下: leftjoin('db', function ($join) {···}); leftjoi ...

  6. docker Swarm mode集群

    基本概念 Swarm 是使用 SwarmKit 构建的 Docker 引擎内置(原生)的集群管理和编排工具. 使用 Swarm 集群之前需要了解以下几个概念. 节点 运行 Docker 的主机可以主动 ...

  7. linux 禁ping

    今天用nmap扫描了局域网的主机,发现几个主机开着好多危险端口,做linux的,对这些安全知识有一点了解.遂用nmap扫描了自己的主机是否存在可利用端口.发现每次nmap都能成功的检测我的主机是ali ...

  8. @Transient的应用

    我今天分配的任务是为一个页面Debug,遇到了一个问题查询的实体类在数据库没有对应的表,这时最常用的是建立视图或者表,但是应用@Transient注释可以让你更简单,免除建立表还有视图需要找多表关联关 ...

  9. vs install 安装时自动添加注册表

    思路:使用自定义 解决方案添加类库项目 添加安装程序类 随后右键查看代码 在构造函数添加事件 同时完成这个事件,在此事件中根据需要添加我们需要的内容,此处为添加注册表,并根据安装目录添加url pro ...

  10. np.array()与np.asarray()区别

    1. 数据源a是数组ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会.也就是说改变a的值,b不会. # 数据源a是列表时,两者没区别 a=[[1,2,3],[4 ...