Python实现的解析网页看报程序

本文介绍了一个Python脚本,用于自动从参考消息网站下载当天的图片报纸,并将其保存到本地供查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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"><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!"
内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格和根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量和指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序和清理。 阅读建议:由于本资源涉及较多底层概念和技术细节,建议读者先复习C语言基础知识,特别是指针和内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解和掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值