Python通过解析网页实现看报程序的方法
admin
2023-07-31 02:05:32
0

本文所述实例可以实现基于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\'.+\'

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!\"

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...