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

 更新时间:2014年08月04日 09:03:06   投稿:shichen2014  
这篇文章主要介绍了Python通过解析网页实现看报程序的方法,比较实用的功能,需要的朋友可以参考下

本文所述实例可以实现基于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爬取微博热搜数据并保存

    这篇文章主要介绍了如何用python爬取微博热搜数据并保存,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python实现发送警告通知到企业微信方法详解

    Python实现发送警告通知到企业微信方法详解

    常见的报警方式有:邮件,电话,短信,微信。本文将介绍如何利用Python发送警告通知到企业微信,文中的示例代码有一定的参考价值,感兴趣的可以了解一下
    2022-01-01
  • Python相互导入的问题解决

    Python相互导入的问题解决

    大家好,本篇文章主要讲的是Python相互导入的问题解决,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • python目标检测实现黑花屏分类任务示例

    python目标检测实现黑花屏分类任务示例

    这篇文章主要为大家介绍了python目标检测实现黑花屏分类任务示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • django 微信网页授权登陆的实现

    django 微信网页授权登陆的实现

    这篇文章主要介绍了django 微信网页授权登陆的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 基于pandas数据样本行列选取的方法

    基于pandas数据样本行列选取的方法

    下面小编就为大家分享一篇基于pandas数据样本行列选取的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python编写Windows Service服务程序

    Python编写Windows Service服务程序

    这篇文章主要为大家详细介绍了Python编写Windows Service服务程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Windows下Python2与Python3两个版本共存的方法详解

    Windows下Python2与Python3两个版本共存的方法详解

    这篇文章主要介绍了Windows下Python2与Python3两个版本共存的方法,文中介绍的很详细,对大家具有一定的参考价值,有需要的朋友们下面来一起看看吧。
    2017-02-02
  • python的pandas工具包,保存.csv文件时不要表头的实例

    python的pandas工具包,保存.csv文件时不要表头的实例

    今天小编小编就为大家分享一篇python的pandas工具包,保存.csv文件时不要表头的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python实现pdf转word详细代码

    Python实现pdf转word详细代码

    在日常工作中,我们经常会遇到需要将PDF文件转换成Word文件的需求。虽然市面上有许多PDF转Word的工具,但是它们通常需要付费或者有转换后的格式问题,这篇文章主要给大家介绍了关于Python实现pdf转word的相关资料,需要的朋友可以参考下
    2023-09-09

最新评论