zoukankan      html  css  js  c++  java
  • python爬新闻

    import re
    from urllib import request
    from lxml import etree
    
    testurl="http://news.163.com/rank/"
    
    with request.urlopen(testurl) as f:
        print('Status:', f.status, f.reason)
        #网页的编码格式只取一次,默认所有的编码方式都是这个
        decode=(f.headers['Content-Type'].split(';')[1]).split('=')[1]
        data = f.read().decode(decode.lower())
        infos = re.findall(r'<div class="titleBar" id=".*?"><h2>(.*?)</h2><div class="more"><a href="(.*?)">.*?</a></div></div>', data, re.S)
        for i in range(len(infos)):
            print('%s-%s'%(i,infos[i][0]))
        print('选择新闻类型')
        k=input()
        if k.isdigit()and int(k)<len(infos):
            newpage=(request.urlopen(infos[int(k)][1]).read()).decode(decode.lower())
            dom=etree.HTML(newpage)
            items=dom.xpath('//tr/td/a/text()')
            urls=dom.xpath('//tr/td/a/@href')
            assert (len(items)==len(urls))
            print(len(items))
            for i in range(len(urls)):
                print(items[i])
                new=(request.urlopen(urls[i]).read()).decode(decode.lower())
                ncs=re.findall(r'<div id="endText" class="end-text">.*?</div>',data,re.S)
                newdom=etree.HTML(new)
                newitems=newdom.xpath("//div[@id='endText'and @class='post_text']/p/text()")
                for n in newitems:
                    print(n)
                print('=======================输入y继续')
                if 'y'==input():continue
                else:break;
  • 相关阅读:
    jquery常用语句
    记录一个奇异的问题
    冰块渲染2
    冰块渲染
    GCAlloc 问题一则
    矩阵基础3
    优化 Overdraw 和 GrabPass
    优化平面法线贴图
    环境模拟
    使用 GPU 加速计算
  • 原文地址:https://www.cnblogs.com/zhisy/p/6832295.html
Copyright © 2011-2022 走看看