用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - python代码库

爬取新闻

2020-10-18 作者:tcmans举报

[python]代码库

from urllib.request import urlopen
from urllib.parse import urljoin 
from re import findall, sub, S       #S表示正则表达式中的.可以匹配换行符
from os.path import basename,isdir
from os import mkdir

url = r'网站地址'

root = 'XX新闻'
if not isdir(root):
    mkdir(root)

while True:
    with urlopen(url)as fp:
        content = fp.read().decode()

    #提取标题    
    pattern = r'<h1 .+?>(.+?)</h1>'
    title = findall(pattern,content)[0]
    title = sub(r'<.+?>|&nbsp;','',title)
    child =rf'{root}\{title}'    #在root下创建title文件夹,加个r是不想斜线影响标题的第一个字符
    if not isdir(child):
        mkdir(child)
        print(title)

    #提取文本
    pattern = r'<p class="MsoNormal".+?>(.+?)</p>'
    with open(rf'{child}\{title}.txt','w',encoding='utf-8') as fp:    
        for item in findall(pattern,content, S):
            item = sub(r'<.+?>|&nbsp;','',item).strip()
            if item:
                fp.write(item+'\n')
      
    #提取图片
    parttern = r'<img width=.+?src="(.+?)"'
    for item in findall(parttern,content):
        item = urljoin(url,item)
        with urlopen(item) as fp_web:
            with open(rf'{child}\{basename(item)}','wb') as fp_local:
                fp_local.write(fp_web.read())

    #下一条新闻地址
    pattern = r'下一条:<a href="(.+?)"'
    next_url = findall(pattern,content)
    if not next_url:
        break
    next_url = urljoin(url,next_url[0])
    url = next_url


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。