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函数可变参数定义及其参数传递方式实例详解
May 25 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
详解Django的model查询操作与查询性能优化
Oct 16 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
pygame实现飞机大战
Mar 11 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
May 28 Python
对python pandas中 inplace 参数的理解
Jun 27 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
解决hive中导入text文件遇到的坑
Apr 07 Python
python在package下继续嵌套一个package
Apr 14 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的数据库接口和技术
2016/12/09 PHP
Laravel框架定时任务2种实现方式示例
2018/12/08 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
JQuery ztree带筛选、异步加载实例讲解
2016/02/25 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
详解vue-cil和webpack中本地静态图片的路径问题解决方案
2017/09/27 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
layui use 定义js外部引用函数的方法
2019/09/26 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
Python操作MongoDB详解及实例
2017/05/18 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python实现转圈打印矩阵
2019/03/02 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
春节活动策划方案
2014/01/24 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
食品安全处置方案
2014/06/14 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
停电放假通知
2015/04/14 职场文书
领导离职感言
2015/08/03 职场文书