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 21 Python
Python 3中的yield from语法详解
Jan 18 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
Python判断以什么结尾以什么开头的实例
Oct 27 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
python实现大转盘抽奖效果
Jan 22 Python
安装好Pycharm后如何配置Python解释器简易教程
Jun 28 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
如何通过一篇文章了解Python中的生成器
Apr 02 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
一个ftp类(ini.php)
2006/10/09 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
javascript父、子页面交互技巧总结
2014/08/08 Javascript
判断是否存在子节点的实现代码
2016/05/18 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
[01:03:22]LGD vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python通过自定义isnumber函数判断字符串是否为数字的方法
2015/04/23 Python
深入解析Python中的lambda表达式的用法
2015/08/28 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
django富文本编辑器的实现示例
2019/04/10 Python
keras中的backend.clip用法
2020/05/22 Python
Python函数的迭代器与生成器的示例代码
2020/06/18 Python
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
介绍一下write命令
2014/08/10 面试题
医学院学生的自我评价分享
2013/11/19 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
房展策划方案
2014/06/07 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
汽车转让协议书范本
2014/12/07 职场文书
公司财务人员岗位职责
2015/04/14 职场文书
公司食堂管理制度
2015/08/05 职场文书
PyTorch的Debug指南
2021/05/07 Python
Node与Python 双向通信的实现代码
2021/07/16 Javascript
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis
Python日志模块logging用法
2022/06/05 Python