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 20 Python
Django 使用logging打印日志的实例
Apr 28 Python
Django使用详解:ORM 的反向查找(related_name)
May 30 Python
python操作excel文件并输出txt文件的实例
Jul 10 Python
Tensorflow 合并通道及加载子模型的方法
Jul 26 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
python中关于数据类型的学习笔记
Jul 19 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/29 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
Python内置函数dir详解
2015/04/14 Python
Python开发的HTTP库requests详解
2017/08/29 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
python返回数组的索引实例
2019/11/28 Python
Python版中国省市经纬度
2020/02/11 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
竟聘演讲稿范文
2013/12/31 职场文书
顶碗少年教学反思
2014/02/21 职场文书
小学运动会口号
2014/06/07 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
个人委托书范本汇总
2014/10/01 职场文书
给领导敬酒词
2015/08/12 职场文书
教师节随笔
2015/08/15 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
mysql优化
2021/04/06 MySQL
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技
《吸血鬼幸存者》新内容发布 追加多个全新模式
2022/04/07 其他游戏
Tomcat配置访问日志和线程数
2022/05/06 Servers