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新手中常见的疑惑及解答
Jun 14 Python
详解python多线程、锁、event事件机制的简单使用
Apr 27 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
Python递归函数实例讲解
Feb 27 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
详解python pandas 分组统计的方法
Jul 30 Python
Django实现文件上传下载
Oct 06 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
python实现二分类的卡方分箱示例
Nov 22 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
python speech模块的使用方法
Sep 09 Python
用Python实现职工信息管理系统
Dec 30 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
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
java和javascript获取word文档的书签位置对比
2014/06/19 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
爬山算法简介和Python实现实例
2014/04/26 Python
python中sets模块的用法实例
2014/09/30 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
python实现上传文件到linux指定目录的方法
2020/01/03 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
浅析CSS3 用text-overflow解决文字排版问题
2020/10/28 HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
会计学财务管理专业个人的自我评价
2013/10/19 职场文书
校园文化建设方案
2014/02/03 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
党员入党表决心的话
2014/03/11 职场文书
工厂搬迁方案
2014/05/11 职场文书
四年级学生期末评语
2014/12/26 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
大学生读书笔记范文
2015/07/01 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python