使用Python的urllib2和pyquery 提取深圳市太平洋影城的影讯(一)——分析html页面

来源:互联网 发布:中国拍卖行业协会网络 编辑:程序博客网 时间:2024/04/28 03:45

工具:

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代码来提取影讯了。

1 0
原创粉丝点击