python 携程_python-携程爬虫

本文介绍了如何使用Selenium模拟浏览器行为获取动态加载的内容,结合BeautifulSoup解析HTML,实现携程酒店信息的爬取。详细讲述了Selenium的使用方法、等待策略,以及BeautifulSoup的基本操作,最后展示了如何用xlwt、xlrd和xlutils进行Excel读写操作,以存储爬取的数据。
摘要由CSDN通过智能技术生成

前言

这篇内容讲解js生成内容型,上一篇讲解的所需内容是全部在html源码中可以找得到的,而比如携程网随便打开一个旅店的页面,像图1酒店点评下面的位置等信息在开发者工具中的html代码中可看到在类为bar_score的div中,可是查看源代码搜索bar_score却并没有搜索结果,原因是因为这部分内容是由js代码生成,然后在页面渲染时填充进div中,故源代码中是找不到的。

图1

解决方式:Seleunium+BeautifulSoup

1.Selenium介绍####

Selenium本来是作为一个自动化测试工具。它可以模拟浏览器行为,比如打开浏览器,点击某个元素等等。所以可以利用它获取页面加载后的元素

安装

大多数的python第三方库都可以在以下网站中搜索找到,[python packageIndex]。后面提到的第三方库均可在该网站中下载。(https://pypi.python.org/)

Selenuim仅支持部分浏览器,这里以火狐浏览器为例,并且需要最好下载配套的Selenium和fiirefox,否则可能会遇到版本不兼容问题。这里所用到的是selenium2.42.1和firefox27.0.1(好老)。

操作

打开一个浏览器和网址

from selenium import webdriver

driver = webdriver.Firefox() #打开火狐浏览器

url = 'https://www.baidu.com'

driver.set_page_load_timeout(20) #设置页面超时时间

driver.get(url) #打开对应网址

常用方式定位元素

等待

Selenium中的等待,有时候页面加载需要一定时间,如果立即定位元素可能会出现获取不到元素的错误,所以需要设置等待。

1.强制等待sleep(xx),强制让闪电侠等xx时间,不管浏览器能不能跟上速度,还是已经提前到了,都必须等xx秒。

sleep(3)

2.隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。隐性等待,最长等30秒

driver.implicitly_wait(30)

3.显性等待,WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。隐性等待和显性等待可以同时用,但要注意:等待的最长时间取两者之中的大者

from selenium.webdriver.support.wait import WebDriverWait

WebDriverWait(driver, 20, 0.5).until(EC.presence_of_element_located(locator))

2.BeautifulSoup####

Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,Beautiful Soup 3 目前已经停止开发,推荐在现在的项目中使用Beautiful Soup 4,不过它已经被移植到BS4了,也就是说导入时我们需要 import bs4 。

from bs4 import BeautifulSoup

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_doc,"html.parser")

comment_soup = index.findAll("div", { "class" : "v2_reviewsitem" })

3.xlwt、xlrd、xlutils进行excel读写操作

xlwt::对excel进行写操作

基本操作如下,详情可参考以下文档:http://xlwt.readthedocs.io/en/latest/genindex.html

file = xl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值