使用Python的urllib2和pyquery 提取深圳市太平洋影城的影讯(一)——分析html页面
2016-05-21 15:10
573 查看
工具:
1. windows 7上安装Python2.7
2. 使用Eclipse做为IDE开发,在Eclipse Marketplace里搜索并安装Eclipse Python插件:pyDev
3. 使用Pip安装pyquery,若Pip不可用,还要先安装Pip
4. Http工具,我这里使用的是Advanced RESET Client,还可以使用postman
分析网站数据:
1. 太平洋影城官方网站:http://www.sztpy.com.cn/zh-CN/index.html
2. 进入官网首页后点击“电影排期”,进入电影影讯搜索页面:http://www.sztpy.com.cn/zh-CN/products009.html
3. 点击“请选择影院”下拉框,可以得到一个完整的影院列表,我们就从这里提取所有的连锁电影院信息,我们还可以看到两个“查询”按钮;两个“请选择日期”的下拉框;一个电影列表。有了这些我们就可以通过分析html源码,然后使用Python来提取影讯了:
4. 下面我们就分析html源代码,并查看form表单是如何提交查询请求的。首先,在浏览器鼠标右键选择查看网页源代码,然后搜索html的form标签,我们可以看到表单涉及到三个输入字段:typeid,用来表示日期;searchType,用来表示排序类型;proTypeID,用来表示影院名称。
5. 有了这些表单信息,我们使用Advanced RESET Client来模拟post请求:填入post请求url:http://www.sztpy.com.cn/zh-CN/products009.html, Data Form字段值:typeid=100081134 searchType=0 proTypeID=100139575;点击SEND,执行post。由上一步各个字段可能值我们知道这是在请求2016年05月22日,深圳新城汇店的电影排片榜,其中影片按照放映厅来排序。
网站响应成功 http Header 如下:
Date: Sat, 21 May 2016 06:45:47 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Mon, 11 May 2015 19:37:00 CST
Vary: Accept-Encoding
Set-Cookie: JSESSIONID=bac7dyHloGtoE89AnYLsv; domain=.sztpy.com.cn; path=/; HttpOnly
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
返回的影片列表:
这样我们就得到了太平洋影城的影讯信息,这些影片信息是使用<tr><td></td></tr>来控制样式的;有放映厅,时间,影片,国别,语别,票价,时长这几个字段。如果觉得返回信息不可靠,我们还可以通过官方网站的页面来验证结果。
接下来,我们就可以编写Python代码来提取影讯了。
1. windows 7上安装Python2.7
2. 使用Eclipse做为IDE开发,在Eclipse Marketplace里搜索并安装Eclipse Python插件:pyDev
3. 使用Pip安装pyquery,若Pip不可用,还要先安装Pip
4. Http工具,我这里使用的是Advanced RESET Client,还可以使用postman
分析网站数据:
1. 太平洋影城官方网站:http://www.sztpy.com.cn/zh-CN/index.html
2. 进入官网首页后点击“电影排期”,进入电影影讯搜索页面:http://www.sztpy.com.cn/zh-CN/products009.html
3. 点击“请选择影院”下拉框,可以得到一个完整的影院列表,我们就从这里提取所有的连锁电影院信息,我们还可以看到两个“查询”按钮;两个“请选择日期”的下拉框;一个电影列表。有了这些我们就可以通过分析html源码,然后使用Python来提取影讯了:
4. 下面我们就分析html源代码,并查看form表单是如何提交查询请求的。首先,在浏览器鼠标右键选择查看网页源代码,然后搜索html的form标签,我们可以看到表单涉及到三个输入字段:typeid,用来表示日期;searchType,用来表示排序类型;proTypeID,用来表示影院名称。
<form action="products009.html" method="post" name="searchForm" > <div style=" height:35px;"> <div style="width:96px; float:left;"> <select class="search_secle" name="typeid1" style="width:95px;"> <option value="100081133">2016-05-21</option> <option value="100081134">2016-05-22</option> <option value="100081135">2016-05-27</option> </select> </div> <div style="width:100px; margin-left:10px;float:left;"> <select class="search_secle" name="searchType" style="width:100px;"> <option value="0">按厅排序</option> <option value="1">按影片排序</option> <option value="2">按上映时间排序</option> </select> </div> </div> <div style="float:left; padding-right:6px"> <select class="search_secle5" name="proTypeID" style="width:120px" id="yyID"> <option selected="selected" value="0">请选择影院</option> <option value="100115695">深圳东海店</option> <option value="100115694">深圳京基百纳店</option> <option value="100115692">深圳天利名城店</option> <option value="100139575">深圳新城汇店</option> <option value="100129308">深圳星海名城店</option> <option value="100145606">深圳8号仓店</option> <option value="100152365">深圳同泰时代中心店</option> <option value="100152366">深圳星航商业广场店</option> </select> </div> <div style="float:left"> <input type="submit" value="" style="width:80px; cursor:pointer; border:0; height:21px; background:url(../tpl/2012/t/www.taiping2012.com/zh-CN/images/search.jpg) no-repeat;" onClick="javascript:return check11111();" /> </div> <div style="clear:both"></div> </form>
5. 有了这些表单信息,我们使用Advanced RESET Client来模拟post请求:填入post请求url:http://www.sztpy.com.cn/zh-CN/products009.html, Data Form字段值:typeid=100081134 searchType=0 proTypeID=100139575;点击SEND,执行post。由上一步各个字段可能值我们知道这是在请求2016年05月22日,深圳新城汇店的电影排片榜,其中影片按照放映厅来排序。
网站响应成功 http Header 如下:
Date: Sat, 21 May 2016 06:45:47 GMT
Server: Apache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Expires: Mon, 11 May 2015 19:37:00 CST
Vary: Accept-Encoding
Set-Cookie: JSESSIONID=bac7dyHloGtoE89AnYLsv; domain=.sztpy.com.cn; path=/; HttpOnly
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
返回的影片列表:
<table width="100%" border="0" cellpadding="1" cellspacing="1"> <tr style="line-height:25px; background:#FF0000; color:#FFFFFF;"> <td width="15%" align="center" ><b>深圳新城汇店</b></td> <td width="15%" align="center" ><b>时间</b></td> <td width="30%" align="center" ><b>影片</b></td> <td width="10%" align="center" ><b>国别</b></td> <td width="10%" align="center" ><b>语别</b></td> <td width="10%" align="center" ><b>票价</b></td> <td width="10%" align="center" ><b>时长</b></td> </tr> <tr style="background:#CCCCCC"> <td rowspan="5" align="center">1号厅</td> <td align="center"><span style="color:#0e0f85;">11:30</span></td> <td align="center">愤怒的小鸟(3D)</td> <td align="center">芬兰</td> <td align="center">国语</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">50元</span></td> <td align="center">97分钟</td> <tr style="background:#CCCCCC"> <td align="center"><span style="color:#0e0f85;">13:30</span></td> <td align="center">愤怒的小鸟(3D)</td> <td align="center">芬兰</td> <td align="center">原版</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">50元</span></td> <td align="center">97分钟</td> </tr> <tr style="background:#CCCCCC"> <td align="center"><span style="color:#0e0f85;">15:30</span></td> <td align="center">愤怒的小鸟(3D)</td> <td align="center">芬兰</td> <td align="center">原版</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">50元</span></td> <td align="center">97分钟</td> </tr> <tr style="background:#CCCCCC"> <td align="center"><span style="color:#0e0f85;">17:30</span></td> <td align="center">愤怒的小鸟(3D)</td> <td align="center">芬兰</td> <td align="center">国语</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">50元</span></td> <td align="center">97分钟</td> </tr> <tr style="background:#CCCCCC"> <td align="center"><span style="color:#0e0f85;">19:30</span></td> <td align="center">愤怒的小鸟(3D)</td> <td align="center">芬兰</td> <td align="center">原版</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">50元</span></td> <td align="center">97分钟</td> </tr> </tr> <tr style="background:#dadada"> <td rowspan="3" align="center">5号厅</td> <td align="center"><span style="color:#0e0f85;">12:10</span></td> <td align="center">分歧者3:忠诚世界</td> <td align="center">美国</td> <td align="center">英语</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">40元</span></td> <td align="center">120分钟</td> <tr style="background:#dadada"> <td align="center"><span style="color:#0e0f85;">16:45</span></td> <td align="center">分歧者3:忠诚世界</td> <td align="center">美国</td> <td align="center">英语</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">40元</span></td> <td align="center">120分钟</td> </tr> <tr style="background:#dadada"> <td align="center"><span style="color:#0e0f85;">19:00</span></td> <td align="center">分歧者3:忠诚世界</td> <td align="center">美国</td> <td align="center">英语</td> <td align="center"><span style="color:#fb0000; font-weight:bold;">40元</span></td> <td align="center">120分钟</td> </tr> </tr> </table>
这样我们就得到了太平洋影城的影讯信息,这些影片信息是使用<tr><td></td></tr>来控制样式的;有放映厅,时间,影片,国别,语别,票价,时长这几个字段。如果觉得返回信息不可靠,我们还可以通过官方网站的页面来验证结果。
接下来,我们就可以编写Python代码来提取影讯了。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- 在Windows 8.1的IE 11中屏蔽双击放大功能
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例