Python通过解析网页实现看报程序的方法


Posted in Python onAugust 04, 2014

本文所述实例可以实现基于Python的查看图片报纸《参考消息》并将当天的图片报纸自动下载到本地供查看的功能,具体实现代码如下:

# coding=gbk
import urllib2
import socket
import re
import time
import os

# timeout in seconds
#timeout = 10
#socket.setdefaulttimeout(timeout)
timeout = 10
urllib2.socket.setdefaulttimeout(timeout)

home_url = "http://www.hqck.net"
home_page = ""
try:
  home_page_context = urllib2.urlopen(home_url)
  home_page = home_page_context.read()

  print "Read home page finishd."
  print "-------------------------------------------------"
except urllib2.URLError,e:
  print e.code
  exit()
except:
  print e.code
  exit()

reg_str = r'<a class="item-baozhi" href="/arc/jwbt/ckxx/\d{4}/\d{4}/\w+\.html" rel="external nofollow" ><span class.+>.+</span></a>'

news_url_reg = re.compile(reg_str)

today_cankao_news = news_url_reg.findall(home_page)

if len(today_cankao_news) == 0:
  print "Cannot find today's news!"
  exit()

my_news = today_cankao_news[0]
print "Latest news link = " + my_news
print

url_s = my_news.find("/arc/")
url_e = my_news.find(".html")
url_e = url_e + 5

print "Link index = [" + str(url_s) + "," + str(url_e) + "]"
my_news = my_news[url_s:url_e]
print "part url = " + my_news

full_news_url = home_url + my_news
print "full url = " + full_news_url
print

image_folder = "E:\\new_folder\\"

if (os.path.exists(image_folder) == False):
  os.makedirs(image_folder)
today_num = time.strftime('%Y-%m-%d',time.localtime(time.time()))
image_folder = image_folder + today_num + "\\"
if (os.path.exists(image_folder) == False):
  os.makedirs(image_folder)
print "News image folder = " + image_folder
print

context_uri = full_news_url[0:-5]

first_page_url = context_uri + ".html"
try:
  first_page_context = urllib2.urlopen(first_page_url)
  first_page = first_page_context.read()
except urllib2.HTTPError, e:
  print e.code
  exit()

tot_page_index = first_page.find("共")
tot_page_index = tot_page_index

tmp_str = first_page[tot_page_index:tot_page_index+10]
end_s = tmp_str.find("页")

page_num = tmp_str[2:end_s]
print page_num

page_count = int(page_num)
print "Total " + page_num + " pages:"
print

page_index = 1
download_suc = True
while page_index <= page_count:
  page_url = context_uri
  if page_index > 1:
    page_url = page_url + "_" + str(page_index)
  page_url = page_url + ".html"
  print "News page link = " + page_url

  try:
    news_img_page_context = urllib2.urlopen(page_url)
  except urllib2.URLError,e:
    print e.reason
    download_suc = False
    break
  
  news_img_page = news_img_page_context.read()

  #f = open("e:\\page.html", "w")
  #f.write(news_img_page)
  #f.close()

  reg_str = r'http://image\S+jpg'
  image_reg = re.compile(reg_str)
  image_results = image_reg.findall(news_img_page)
  if len(image_results) == 0:
    print "Cannot find news page" + str(page_index) + "!"
    download_suc = False
    break
  
  image_url = image_results[0]

  print "News image url = " + image_url
  news_image_context = urllib2.urlopen(image_url)

  image_name = image_folder + "page_" + str(page_index) + ".jpg"
  imgf = open(image_name, 'wb')
  print "Getting image..."
  try:
    while True:
      date = news_image_context.read(1024*10)
      if not date:
        break
      imgf.write(date)
    imgf.close()
  except:
    download_suc = False
    print "Save image " + str(page_index) + " failed!"
    print "Unexpected error: " + sys.exc_info()[0] + sys.exc_info()[1]
  else:
    print "Save image " + str(page_index) + " succeed!"
    print
  page_index = page_index + 1

if download_suc == True:
  print "News download succeed! Path = \"" + str(image_folder) + "\""
  print "Enjoy it! ^^"
else:
  print "news download failed!"
Python 相关文章推荐
python在多玩图片上下载妹子图的实现代码
Aug 13 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python编程中对文件和存储器的读写示例
Jan 25 Python
sublime text 3配置使用python操作方法
Jun 11 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
python使用pipeline批量读写redis的方法
Feb 18 Python
Python常见的pandas用法demo示例
Mar 16 Python
wxPython绘图模块wxPyPlot实现数据可视化
Nov 19 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
简单了解python调用其他脚本方法实例
Mar 26 Python
使用python计算三角形的斜边例子
Apr 15 Python
教你用python控制安卓手机
May 13 Python
基于Python实现的扫雷游戏实例代码
Aug 01 #Python
python脚本实现查找webshell的方法
Jul 31 #Python
用python删除java文件头上版权信息的方法
Jul 31 #Python
Python datetime时间格式化去掉前导0
Jul 31 #Python
python处理文本文件并生成指定格式的文件
Jul 31 #Python
Python中关键字is与==的区别简述
Jul 31 #Python
python处理文本文件实现生成指定格式文件的方法
Jul 31 #Python
You might like
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
PHP教程 预定义变量
2009/10/23 PHP
关于PHP5 Session生命周期介绍
2010/03/02 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
浅析PHP中的 inet_pton 网络函数
2019/12/16 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
javascript得到当前页的来路即前一页地址的方法
2014/02/18 Javascript
js实现touch移动触屏滑动事件
2015/04/17 Javascript
BootStrap入门教程(三)之响应式原理
2016/09/19 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python2.x版本中基本的中文编码问题解决
2015/10/12 Python
Python 对象中的数据类型
2017/05/13 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
HTML5新增的Css选择器、伪类介绍
2013/08/07 HTML / CSS
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
法制宣传实施方案
2014/03/13 职场文书
大气污染防治方案
2014/05/19 职场文书
九一八事变演讲稿
2014/09/05 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Promise面试题详解之控制并发
2021/05/14 面试题