当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Python  » Web编程
漂白

新闻采集

漂白 发布于 2014年05月17日 21时, 2评/2046阅
分享到: 
收藏 +0
2
从腾讯新闻首页上,采集新闻标题,新闻图片,新闻内容
标签: <无>

代码片段(1) [全屏查看所有代码]

1. [文件] getNews.py ~ 3KB     下载(75)     跳至 [1] [全屏预览]

#!/usr/bin/python 
#encoding='utf-8'
#runing under python 3.x
import urllib.request
from bs4 import BeautifulSoup
import re

def removeTags(content):#谁起的这个名字
    strs = re.split("<style>.*?</style>" \
                    "|<script.*?>.*?</script>" \
                    "|&#[0-9]+;"
                    "|<!--\[if !IE\]>.+?<!\[endif\]-->" \
                    "|<.*?>" \
                    "|strong#.*?no-repeat}" \
                    , content)#各种匹配,通过“|”分隔
    ans = ''
    #将切分的结果组合起来
    for each in strs:
        ans += each
    return ans

#Step1
page = urllib.request.urlopen("http://news.qq.com/")
if page.getcode() != 200:
    exit()
mybytes = page.read()
page.close()
html = mybytes.decode("gbk")
soup = BeautifulSoup(html)
exp = r'http://news.qq.com/a/.*'#这个是用来匹配符合条件的链接,使用正则表达式匹配
newsListPattern = re.compile(exp)
links = soup.findAll(href = newsListPattern)

expRemoveTag = r'<script>.*?</script>'

for link in links:
    #print(link['href'])    链接
    page = urllib.request.urlopen(link['href'])
    if page.getcode() != 200:
        exit()
    mybytes = page.read()
    page.close()
    newshtml = mybytes.decode("gbk")
    soup = BeautifulSoup(newshtml)
    newsTitleTag = soup.find('h1')  #新闻标题节点
    newsTitle = newsTitleTag.contents[0];   #新闻标题内容

    print(newsTitle)
    #图片内容
    newContent = []
    newsContentTag = soup.find(id='Cnt-Main-Article-QQ') 
    if newsContentTag != None:
        newsImgTopTag = newsContentTag.find('p')   #图片顶层节点
        if newsImgTopTag != None:
            newImgTag = newsImgTopTag.find("img")
            if newImgTag != None:
                imgLink = newImgTag['src']                  #图片链接
                imgAlt = newImgTag['alt']                   #图片文字说明
                print(imgLink)
                print(imgAlt)
    
            #获取文本信息
            nextNewsContentTags = newsImgTopTag.find_next_siblings()
            newContent.clear();
            for newsContentTag in nextNewsContentTags:
                if len(newsContentTag.contents) > 0:
                    newContent.append(newsContentTag.contents[0])

    #打印单条新闻
    if newContent != None:
        strs = ''
        for content in newContent:
            if content.string != None:
                strs += content.string
        strs = removeTags(strs)
        print(strs)


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(2)

开源从代码分享开始 分享代码
漂白的其它代码 全部(4)...