当前位置:Gxlcms > Python > Python通过解析网页实现看报程序的方法

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

时间:2021-07-01 10:21:17 帮助过:15人阅读

本文所述实例可以实现基于Python的查看图片报纸《参考消息》并将当天的图片报纸自动下载到本地供查看的功能,具体实现代码如下:

  1. # coding=gbk
  2. import urllib2
  3. import socket
  4. import re
  5. import time
  6. import os
  7. # timeout in seconds
  8. #timeout = 10
  9. #socket.setdefaulttimeout(timeout)
  10. timeout = 10
  11. urllib2.socket.setdefaulttimeout(timeout)
  12. home_url = "http://www.hqck.net"
  13. home_page = ""
  14. try:
  15. home_page_context = urllib2.urlopen(home_url)
  16. home_page = home_page_context.read()
  17. print "Read home page finishd."
  18. print "-------------------------------------------------"
  19. except urllib2.URLError,e:
  20. print e.code
  21. exit()
  22. except:
  23. print e.code
  24. exit()
  25. reg_str = r'<span class.+="">.+</span>'
  26. news_url_reg = re.compile(reg_str)
  27. today_cankao_news = news_url_reg.findall(home_page)
  28. if len(today_cankao_news) == 0:
  29. print "Cannot find today's news!"
  30. exit()
  31. my_news = today_cankao_news[0]
  32. print "Latest news link = " + my_news
  33. print
  34. url_s = my_news.find("/arc/")
  35. url_e = my_news.find(".html")
  36. url_e = url_e + 5
  37. print "Link index = [" + str(url_s) + "," + str(url_e) + "]"
  38. my_news = my_news[url_s:url_e]
  39. print "part url = " + my_news
  40. full_news_url = home_url + my_news
  41. print "full url = " + full_news_url
  42. print
  43. image_folder = "E:\\new_folder\\"
  44. if (os.path.exists(image_folder) == False):
  45. os.makedirs(image_folder)
  46. today_num = time.strftime('%Y-%m-%d',time.localtime(time.time()))
  47. image_folder = image_folder + today_num + "\\"
  48. if (os.path.exists(image_folder) == False):
  49. os.makedirs(image_folder)
  50. print "News image folder = " + image_folder
  51. print
  52. context_uri = full_news_url[0:-5]
  53. first_page_url = context_uri + ".html"
  54. try:
  55. first_page_context = urllib2.urlopen(first_page_url)
  56. first_page = first_page_context.read()
  57. except urllib2.HTTPError, e:
  58. print e.code
  59. exit()
  60. tot_page_index = first_page.find("共")
  61. tot_page_index = tot_page_index
  62. tmp_str = first_page[tot_page_index:tot_page_index+10]
  63. end_s = tmp_str.find("页")
  64. page_num = tmp_str[2:end_s]
  65. print page_num
  66. page_count = int(page_num)
  67. print "Total " + page_num + " pages:"
  68. print
  69. page_index = 1
  70. download_suc = True
  71. while page_index <= page_count:
  72. page_url = context_uri
  73. if page_index > 1:
  74. page_url = page_url + "_" + str(page_index)
  75. page_url = page_url + ".html"
  76. print "News page link = " + page_url
  77. try:
  78. news_img_page_context = urllib2.urlopen(page_url)
  79. except urllib2.URLError,e:
  80. print e.reason
  81. download_suc = False
  82. break
  83. news_img_page = news_img_page_context.read()
  84. #f = open("e:\\page.html", "w")
  85. #f.write(news_img_page)
  86. #f.close()
  87. reg_str = r'http://image\S+jpg'
  88. image_reg = re.compile(reg_str)
  89. image_results = image_reg.findall(news_img_page)
  90. if len(image_results) == 0:
  91. print "Cannot find news page" + str(page_index) + "!"
  92. download_suc = False
  93. break
  94. image_url = image_results[0]
  95. print "News image url = " + image_url
  96. news_image_context = urllib2.urlopen(image_url)
  97. image_name = image_folder + "page_" + str(page_index) + ".jpg"
  98. imgf = open(image_name, 'wb')
  99. print "Getting image..."
  100. try:
  101. while True:
  102. date = news_image_context.read(1024*10)
  103. if not date:
  104. break
  105. imgf.write(date)
  106. imgf.close()
  107. except:
  108. download_suc = False
  109. print "Save image " + str(page_index) + " failed!"
  110. print "Unexpected error: " + sys.exc_info()[0] + sys.exc_info()[1]
  111. else:
  112. print "Save image " + str(page_index) + " succeed!"
  113. print
  114. page_index = page_index + 1
  115. if download_suc == True:
  116. print "News download succeed! Path = \"" + str(image_folder) + "\""
  117. print "Enjoy it! ^^"
  118. else:
  119. print "news download failed!"

人气教程排行