Python 3.5 爬虫工具代码之网易新闻排行榜

  • 内容
  • 相关

今天给大家更新个文章~利用Python写一个自动爬网易新闻排行榜的脚本.

版本:Python 3.5


import os
import urllib
import requests
import re
from lxml import etree

def save_path(path,fileName,message):
    #判断path文件夹是否存在,如果不存在则创建
    if not os.path.exists(path):
           os.mkdir(path)
    #拼接的是完整的文件名字fileName = '体育'
    #newFileName = '体育'.txt
    newFileName = fileName + '.txt'
    #拼接储存文件的路径(获取的是存储数据文件的绝对路径)
    newFile = os.path.join(path,newFileName)
    #将列表message 写入本地
    with open(newFile, 'w+',encoding = 'utf-8') as f:
        for s in message:
            f.write('%s %s'%(s[0],s[1])) 
#这个函数的作用是解析漏洞新闻排行榜的子标题
def message_info(page):
    #re模块是Python中的正则表达式的模块
    #re.findall 表示通过正则获取数据
    #会获取匹配到的所有字符
    message_info = re.findall('<div class="titleBar" id=".*?"><h2>(.*?)</h2><div class="more"><a href="(.*?)">.*?</a></div></div>',page,re.S)
    return message_info

def page_info(page):
    dom = etree.HTML(page)
    #dom.xpath()在html中查找标签的函数
    #找tr标签中的td,td中的a标签,a标签中的text内容
    title = dom.xpath('//tr/td/a/text()')
    #找tr标签中的td,td中的a标签,a标签中的href的内容
    url = dom.xpath('//tr/td/a/@href')
    new_list = []
    for X in range(len(title)):
        new_tuple = (title[X],url[X])
        new_list.append(new_tuple)

    return new_list

def Spider(url):
    #request.get 做URL请求
    #content 获取请求的内容
    #decode 做gbk的编码
    message = requests.get(url).content.decode('gbk')
    message_List = message_info(message)

    message_path = u'网易新闻排行榜'
    message_fileName = u'网易新闻排行榜'
    save_path(message_path,message_fileName,message_List)
    for item,url in message_List:
        print(item,url)
        new_message = requests.get(url).content.decode('gbk')
        new_message_list = page_info(new_message)
        print(new_message_list)
        save_path(message_path,item,new_message_list)


if __name__ == '__main__':
    start_URL = 'http://news.163.com/rank/'
    Spider(start_URL)

效果演示:


本文标签:

版权声明:若无特殊注明,本文皆为《舜哥哥吖》原创,转载请保留文章出处。

本文链接:Python 3.5 爬虫工具代码之网易新闻排行榜 - http://www.shungg.cn/post/36

发表评论

电子邮件地址不会被公开。 必填项已用*标注