python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...
一,尝试用BeautifulSoup抓取
先打开KFC网站门店列表页面:http://www.kfc.com.cn/kfccda/storelist/index.aspx
可以看到门店列表如下图:
打开Chrome Developer Tools观察页面结构,找到标签如下:
发现要的数据位于id='listhtml'的表里,门店地址数据位于第二个tr开始的行里,尝试用bs抓取:
url = 'http://www.kfc.com.cn/kfccda/storelist/index.aspx'
html = urllib.urlopen(url).read().decode('utf-8')
bsObj = BeautifulSoup(html, "html.parser")
print bsObj.find('tbody', {'id':'listhtml'})
输出:
表格不包含任何内容,可见数据由ajax动态生成,抓取失败。
二,用selenium + PhantomJS抓取
url = 'http://www.kfc.com.cn/kfccda/storelist/index.aspx'
# html = urllib.urlopen(url).read().decode('utf-8')
# bsObj = BeautifulSoup(html, "html.parser")
# print bsObj.find('tbody', {'id':'listhtml'})
driver = webdriver.PhantomJS(executable_path='/home/guowei/bin/phantomjs/bin/phantomjs')
driver.get(url)
print driver.find_element_by_id('listhtml')
输出结果:
有抓取到对象,但不能确定是否是包含需要的数据,再分析网页结构,抓出第一家门店地址看看:
print driver.find_element_by_id('listhtml').find_element_by_xpath('//tr[2]/td[1]').text
输出结果:
茂名餐厅
说明已经成功抓取动态网页的数据!
三、抓取KFC门店数据
观察门店数据表格,所需数据从第二行开始,每行前2列表格数据有用,因此抓取代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from selenium import webdriver
import time
url = 'http://www.kfc.com.cn/kfccda/storelist/index.aspx'
driver = webdriver.PhantomJS(executable_path='/home/guowei/bin/phantomjs/bin/phantomjs')
driver.get(url)
time.sleep(2)
for i in range(1,11):
shopName_xpath = '//tr[' + str(i + 1) + ']/td[1]'
shopAddress_xpath = '//tr[' + str(i + 1) + ']/td[2]'
shopName = driver.find_element_by_css_selector('#listhtml').find_element_by_xpath(shopName_xpath).text
shopAddress = driver.find_element_by_css_selector('#listhtml').find_element_by_xpath(shopAddress_xpath).text
print shopName
print shopAddress
输出结果:
茂名餐厅
吴江路269号2层
翔川餐厅
妙镜路1118号E号商铺
动力南广场餐厅
石龙路750-3号上海南站地下商场南馆
江苏餐厅
江苏路398号1、2层
威宁餐厅
天山路352号101和201
思贤餐厅
思贤路778--180号
惠乐餐厅
人民西路955号
柳州餐厅
沪闵路9001号上海南站站厅层
真北餐厅
桃浦路328号
马陆弘基餐厅
马陆镇沪宜公路2398/2400号
四、总结
time.sleep()非常重要,如果网速太慢有时候ajax程序还未从服务器取得数据,当然用检测一个特定HTML标签的方式会更高效,比如检测上述数据所在表格最后一行最后一格已经载入就可以开始抓取数据。
python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...相关推荐
- python网络爬虫的方法有几种_Python网络爬虫过程中5种网页去重方法简要介绍
一般的,我们想抓取一个网站所有的URL,首先通过起始URL,之后通过网络爬虫提取出该网页中所有的URL链接,之后再对提取出来的每个URL进行爬取,提取出各个网页中的新一轮URL,以此类推.整体的感觉就 ...
- 玩转python网络爬虫黄永祥pdf下载_Python网络爬虫从入门到实践pdf
Python网络爬虫从入门到实践 内容简介 本书将介绍如何使用Python编写网络爬虫程序获取互联网上的大数据.本书包括三部分内容:基础部分.进阶部分和项目实践.基础部分(第1~6章)主要介绍爬虫的三 ...
- python网络爬虫与信息提取_北京理工大学_Python网络爬虫与信息提取(一)
学习 北京理工大学 嵩天 课程笔记 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解 ...
- java爬取网页数据_Python网络爬虫实战(二)数据解析
Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...
- python爬虫开发 从入门到实战_python网络爬虫从入门到实战开发
1.简单的抓取网页 from urllib import request req=request.Request("http://www.baidu.com") response= ...
- python滚动条翻页爬取数据_Python网络爬虫之Selenium 处理滚动条【第十四节】
Selenium 处理滚动条selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. ...
- python爬取去哪儿网_python网络爬虫(12)去哪网酒店信息爬取
目的意义 爬取某地的酒店价格信息,示例使用selenium在Firefox中的使用. 来源 少部分来源于书.python爬虫开发与项目实战 构造 本次使用简易的方案,模拟浏览器访问,然后输入字段,查找 ...
- python 如何爬虫wind api数据_Python网络爬虫实战之十:利用API进行数据采集
一.什么是API? API(ApplicationProgrammingInterface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...
- python3下载网页视频_Python网络爬虫——爬取小视频网站源视频!自己偷偷看哦!...
学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 1.引入库 PS:如有需要Python学习资料的小伙伴 ...
最新文章
- js日期格式化Date
- 【AC Saber】数据结构
- 【渝粤教育】国家开放大学2018年春季 7402-21T社会问题 参考试题
- 新基建带来新机遇!大数据产业发展需“四驱”推动
- Oracle查询所有序列;[oracle中如何创建表的自增ID(通过序列);oracle sql语句大全
- alibaba 实体转json_com.alibaba.fastjson 转换List Map等对象
- d3设置line长度_Graph Embedding之LINE算法解读
- JAVA基于权重的抽奖
- python投注_python练习 | 下注猜大小 | 入门级
- bin文件无法生成,Error: Q0147E: Failed to create Directory ./Flora_GD32.bin\ER$$.ARM.__AT_0x000000C0: File
- 格雷码和二进制相互转换
- Geodesic flow kernel for unsupervised domain adaptation
- 三分钟帮你集成极光推送——和那些你可能不知道的事
- 使用Python3进行身份证号码标准验证
- vue开发完整企业购物商城集成支付宝和微信登陆支付3步实现登陆
- 老板开会要用Word文档?立马做了一款无限次且免费的PDF转Word小程序。
- 第十五周博客作业西北师范大学|李晓婷
- 读Tan基于最大化对比度的去雾方法
- mysql5.7 1698 28000_MySqlError1698(28000)问题的解决方法
- 【笔记】顶会论文程序复现供自己使用的方法