精华内容
参与话题
问答
  • 微博热搜小爬虫

    2019-03-10 18:43:12
    可以爬取微博热搜标题,热度并生成EXCEL文件。用的是request_html这个强大的库,可以在代码中自行加入爬取热搜链接的部分,拿来练手很合适
  • Android Kotlin retrofit2 获取微博热搜列表。自己动手撸一个微博热搜列表熟悉一下Kotlin网络请求模块
  • 一个微博热搜引发的故事

    万次阅读 多人点赞 2020-03-31 15:35:01
    一个微博热搜引发的故事一、故事从这里开始二、搞事情第一步:搜集图片三、搞事情第二步:展示图片四、搞事情第三步:展示图片五、搞事情第四步:统计分析1.数据处理2.数据筛选3.统计各天的频率4.统计星座的频率5....

    一、故事从这里开始

    3月29日那晚,我正在厕所蹲坑来着,大概就是边蹲边刷手机的那种…突然发现一条微博热搜#你出生那天的宇宙#
    在这里插入图片描述在评论区,发现大家都有一个同样的疑惑:无法访问NASA官网(可能是因为访问量过大,导致网络极高延时)。作为一个社会主义正直青年,我怎么能放着不管呢?
    于是,我决定搞事情!!

    二、搞事情第一步:搜集图片

    一个简单的想法油然而生:既然大家没法从官网上下载图片,那我就帮大家集齐图片,然后发给大家就好啦。(搜集数据嘛,写个爬虫不就好了?)
    于是,我直接冲进NASA官网准备分析一波请求。结果…好叭,我也是大家中的一员,我也加载不出图片。
    这点困难我怎么能退缩呢,再于是,我就去微博评论下面苦苦寻找,果然功夫不负有心人,发现豆瓣上有个大佬已经为找齐了所有图片:
    在这里插入图片描述秉承“拿来主义”的作风,我决定这里就是我的数据源(某豆瓣相册
    简单分析了一下,发现可以通过一个m_start的参数进行翻页,每页20张图片(如m_start=0为第一页,m_start=20为第二页),那么写一个循环便可:

    import re
    import queue
    import requests
    import threading
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
     
    headers = {
    'Host': 'www.douban.com',
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
    'Upgrade-Insecure-Requests': '1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
    'Sec-Fetch-Dest': 'document',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-User': '?1',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Cookie': 'bid=rb_kUqiDS6k; douban-fav-remind=1; _pk_ses.100001.8cb4=*; ap_v=0,6.0; __utma=30149280.1787149566.1585488263.1585488263.1585488263.1; __utmc=30149280; __utmz=30149280.1585488263.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __yadk_uid=HNoH1YVIvD2c8HrQDWHRzyLciFJl1AVD; __gads=ID=a1f73d5d4aa31261:T=1585488663:S=ALNI_MafqKPZWHx0TGWTpKEm8TTvdC-eyQ; ct=y; _pk_id.100001.8cb4=722e0554d0127ce7.1585488261.1.1585488766.1585488261.; __utmb=30149280.10.6.1585488263'
    }
     
    # driver初始化
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    driver = webdriver.Chrome(options=chrome_options)
     
    # 下载图片
    def downimg():
        while not img_queue.empty():
            img = img_queue.get()
            img_name = img[0]
            url = img[1]
            res = requests.get(url)
            data =res.content
            with open('./img/%s.webp'%img_name,'wb') as f:
                f.write(data)
            print(img_name)
             
    # 网站参数
    url_o = 'https://www.douban.com/photos/album/1872547715/?m_start=%d'
     
    # 爬取连接
    img_queue = queue.Queue()
    for i in range(0,21):
        url = url_o%(18*i)
        driver.get(url)
        es = driver.find_elements_by_class_name('photo_wrap')
        for e in es:
            img_e = e.find_element_by_tag_name('img')
            img_url = img_e.get_attribute('src')
            img_url = img_url.replace('photo/m/public','photo/l/public') # 替换为大图
            text_e = e.find_element_by_class_name('pl')
            img_date = text_e.text
            img_queue.put((img_date,img_url))
        print('%d页爬取完成'%(i+1))
    driver.close()
     
    # 下载图片 
    thread_list = []
    N_thread = 5
    for i in range(N_thread):
        thread_list.append(threading.Thread(target=downimg))
    for t in thread_list:
        t.start()
    for t in thread_list:
        t.join()
    

    代码简单来说就是:webdriver访问页面并获取图片地址,然后通过多线程利用requests下载并保存图片。
    至此,图片搜集的工作基本完成!

    三、搞事情第二步:展示图片

    有了图片,接下来就是如何让大家获得图片呢?去给每个人私发?机智的我当然不会这么干,我决定写一个小网页来让大家访问。作为很不专业的我,东平西凑,效果大概就是这样(你生日那天的宇宙):
    在这里插入图片描述

    四、搞事情第三步:推广链接

    关于推广,咱也不懂,咱也不敢说。 傻傻的我决定自己发一条微博(心里大概是想:这么方便的工具,肯定会受大家欢迎的,肯定是这样没有错,对,没错…):
    在这里插入图片描述现实嘛,总是残酷的。吃瓜群众都猜到了:无人问津,石沉海底~
    几经周折,最后呢在一位相关话题的热门博主的鼎力帮助下,最终迎来了一些流量:
    在这里插入图片描述

    五、搞事情第四步:统计分析

    虽然这个流量跟我想象的还是相差甚远,毕竟这个话题也是有上亿的阅读量的,但是我还是决定对昨天访问的情况做一个简单的统计:

    1.数据处理

    在某度统计里拿到网页访问数据的原始csv表格后,进行了简单数据处理,调整为更方便读取的格式。

    2.数据筛选

    由于表格中并不仅仅包括NASA页面的数据,还有一些其他页面的数据,于是必须进行数据的筛选:

    # 读取数据
    data = pd.read_csv('./analyze/20200330-20200330.csv',encoding='utf-8')
     
    # 筛选数据(和NASA相关且有有效日期的数据)
    data_NASA = []
    for i in range(len(data)):
        url = urllib.parse.unquote(data['URL'][i])
        pv = data['PV'][i] # 浏览量
        uv = data['UV'][i] # 访客量
        #if url[-1] == '日' and 'NaN' not in url: # 为NASA访问页面
        if 'date=' in url and 'NaN' not in url:
            try:
                data_NASA.append((re.findall('date=(\d*?月\d*?日)',url)[0],pv,uv))
            except:
                pass
    

    3.统计各天的频率

    # 统计各个天数的频率
    PV_map= {}
    UV_map = {}
    PV_total = 0
    UV_total = 0
    for d in data_NASA:
        if d[0] not in PV_map.keys():
            PV_map[d[0]] = 0
            UV_map[d[0]] = 0
        PV_map[d[0]] +=  d[1] # PV
        UV_map[d[0]] +=  d[2] # UV
        PV_total += d[1]
        UV_total += d[2]
    for k in PV_map.keys(): # 计算频率
        PV_map[k] = PV_map[k]/PV_total*100
        UV_map[k] = UV_map[k]/UV_total*100
    PVs= sorted(PV_map.items(),key=lambda x:x[1],reverse=True) # 排序
    UVs= sorted(UV_map.items(),key=lambda x:x[1],reverse=True) # 排序
    

    4.统计星座的频率

    # 判断星座
    def get_xingzuo(month, date):
        dates = (21, 20, 21, 21, 22, 22, 23, 24, 24, 24, 23, 22)
        constellations = ("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座")
        if date < dates[month-1]:
            return constellations[month-1]
        else:
            return constellations[month]
     
    # 统计各星座的频率
    xingzuo = ("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座")
    xingzuo_map = {}
    for x in xingzuo:
        xingzuo_map[x] = 0
    xingzuo_total = 0
    for d in data_NASA:
        month = int(re.findall('(\d*?)月(\d*?)日',d[0])[0][0])
        day = int(re.findall('(\d*?)月(\d*?)日',d[0])[0][1])
        x = get_xingzuo(month,day)
        #xingzuo_map[x] += d[1] # PV
        xingzuo_map[x] += d[2] # UV
        xingzuo_total += d[2]
    for k in xingzuo_map.keys():
        xingzuo_map[k] = xingzuo_map[k]/xingzuo_total*100
    xingzuos= sorted(xingzuo_map.items(),key=lambda x:x[1],reverse=True) # 排序
    

    5.统计月份的频率

    # 统计各月份的频率
    month = [str(i)+'月' for i in range(1,13)]
    month_map = {}
    for m in month:
        month_map[m] = 0
    month_total = 0
    for d in data_NASA:
        m = d[0].split('月')[0]+'月'
        #month_map[m] += d[1] # PV
        month_map[m] += d[2] # UV
        month_total += d[2]
    for k in month_map.keys():
        month_map[k] = month_map[k]/month_total*100
    months= sorted(month_map.items(),key=lambda x:x[1],reverse=True) # 排序
    

    6.数据可视化(3个条形图)

    ## 生日查询TOP10-按访客量UV
    date = []
    uv = []
    for i in UVs:
        date.append(i[0])
        uv.append(i[1])
    top10_date = date[:10]
    top10_date.reverse()
    top10_uv = uv[:10]
    top10_uv.reverse()
    fig, ax = plt.subplots() # 画图
    b = plt.barh(top10_date,top10_uv,color='#6699CC') # 金色#FFFACD 银色#C0C0C0  橙色#FFA500 蓝色#6699CC
    i = len(b)
    for rect in b: # 画数值
        if i==3: # 第三名
            rect.set_facecolor('#FFA500') # 橙色
        if i==2: # 第二名
            rect.set_facecolor('#C0C0C0') # 银色
        if i==1: # 第一名
            rect.set_facecolor('#FFFACD') # 金色
        w = rect.get_width()
        ax.text(w, rect.get_y()+rect.get_height()/2, ' %.2f%%'%w,ha='left', va='center')
        i -= 1
    plt.xticks([]) # 关掉横坐标
     
     
     
    ## 星座查询排名             
    name = []
    v = []
    for i in xingzuos:
        name.append(i[0])
        v.append(i[1])
    name.reverse()
    v.reverse()
    fig, ax = plt.subplots() # 画图
    b = plt.barh(name,v,color='#6699CC') # 金色#FFFACD 银色#C0C0C0  橙色#FFA500 蓝色#6699CC
    i = len(b)
    for rect in b: # 画数值
        if i==3: # 第三名
            rect.set_facecolor('#FFA500') # 橙色
        if i==2: # 第二名
            rect.set_facecolor('#C0C0C0') # 银色
        if i==1: # 第一名
            rect.set_facecolor('#FFFACD') # 金色
        w = rect.get_width()
        ax.text(w, rect.get_y()+rect.get_height()/2, ' %.2f%%'%w,ha='left', va='center')
        i -= 1
    plt.xticks([]) # 关掉横坐标
     
    ## 月份查询排名             
    name = []
    v = []
    for i in months:
        name.append(i[0])
        v.append(i[1])
    name.reverse()
    v.reverse()
    fig, ax = plt.subplots() # 画图
    b = plt.barh(name,v,color='#6699CC') # 金色#FFFACD 银色#C0C0C0  橙色#FFA500 蓝色#6699CC
    i = len(b)
    for rect in b: # 画数值
        if i==3: # 第三名
            rect.set_facecolor('#FFA500') # 橙色
        if i==2: # 第二名
            rect.set_facecolor('#C0C0C0') # 银色
        if i==1: # 第一名
            rect.set_facecolor('#FFFACD') # 金色
        w = rect.get_width()
        ax.text(w, rect.get_y()+rect.get_height()/2, ' %.2f%%'%w,ha='left', va='center')
        i -= 1
    plt.xticks([]) # 关掉横坐标
    

    最后的结果就长这个样子:
    在这里插入图片描述 在这里插入图片描述在这里插入图片描述

    写在最后

    如果可以,我亦希望在无数次键盘的敲击声中创造出所谓的“极致浪漫”~

    最后,附上本次NASA活动中个人觉得比较好看的一些图片:
    在这里插入图片描述在这里插入图片描述

    展开全文
  • 主要介绍了Python网络爬虫之爬取微博热搜的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 所上传的资源是python编写的微博热搜信息爬取项目,内含源代码+sql脚本,另外还对过程中可能出现的问题进行了汇总,对于正在学习这方面的你是一个很好的选择,希望对你有所帮助。
  • 源码包括: 通过python正则表达式爬取新浪微博热搜的标题与热度 连接mysql数据库,并将爬取数据直接写入数据库 mysql查询语句
  • 微博热搜舆情监督

    2020-02-28 15:58:17
    平时也不怎么看微博,但是由于这次疫情,对微博的消息关注的稍微多一点,我浏览微博都只看评论,从来不发表什么意见和个人看法,刚好也好久没写过爬虫了,就当练练手了。这个过程有点小曲折,真是撸码半小时,分析十...

    文章导语

    目前全国防疫战还正在紧张阶段,为了避免感染人数再次反弹,大街小巷都不让出门,学校也迟迟没法开学,哎…,下周就要开始在家上网课了。平时也不怎么看微博,但是由于这次疫情,对微博的消息关注的稍微多一点,我浏览微博都只看评论,从来不发表什么意见和个人看法,刚好也好久没写过爬虫了,就当练练手了。这个过程有点小曲折,真是撸码半小时,分析十年功。

    功能实现

    此脚本主要的功能是获取微博50条热搜并可交互式获取相应每条热搜的评论,然后通过词云分词进行可视化,以便了解大众对热搜词条的总体态度。

    实现过程

    # -*- coding:utf-8 -*-
    # /usr/bin/env python
    
    """
    Author: Zhu Huaren
    Date: 2020/2/25 15:29
    """
    
    import requests
    import urllib
    import time
    import json
    import re
    import jieba
    import wordcloud
    
    headers = {
        "authority": "m.weibo.cn",
        "method": "GET",
        "path": "/p/index?containerid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot&title=%E5%BE%AE%E5%8D%9A%E7%83%AD%E6%90%9C&extparam=pos%3D0_0%26mi_cid%3D100103%26cate%3D10103%26filter_type%3Drealtimehot%26c_type%3D30%26display_time%3D1582790041&luicode=10000011&lfid=231583",
        "scheme": "https",
        "accept": "*/*",
        "accept-encoding": "gzip, deflate, br",
        "accept-language": "zh-CN,zh;q=0.9",
        "cookie": "cokie",
        "dnt": "1",
        "referer": "https://m.weibo.cn/sw.js",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "same-origin",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
    }
    proxy = {
        'HTTP': 'HTTP://180.125.70.78:9999',
        'HTTP': 'HTTP://117.90.4.230:9999',
        'HTTP': 'HTTP://111.77.196.229:9999',
        'HTTP': 'HTTP://111.177.183.57:9999',
        'HTTP': 'HTTP://123.55.98.146:9999',
    
    # 构造微博热搜首页api
    hot_search_api = "https://m.weibo.cn/api/container/getIndex?containerid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot&title=%E5%BE%AE%E5%8D%9A%E7%83%AD%E6%90%9C&extparam=pos%3D0_0%26mi_cid%3D100103%26cate%3D10103%26filter_type%3Drealtimehot%26c_type%3D30%26display_time%3D{}&luicode=10000011&lfid=231583".format(int(time.time()))
    
    res = requests.get(
        "https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26t%3D10%26q%3D%E9%92%9F%E5%8D%97%E5%B1%B1+%E8%BA%AB%E4%BD%93%E9%87%8C%E5%87%BA%E7%8E%B0%E8%B6%B3%E5%A4%9F%E6%8A%97%E4%BD%93%E4%B8%8D%E4%BC%9A%E5%86%8D%E6%84%9F%E6%9F%93&isnewpage=1&extparam=cate%3D0%26pos%3D0%26realpos%3D1%26flag%3D2%26filter_type%3Drealtimehot%26c_type%3D31%26display_time%3D1582790042&luicode=10000011&lfid=106003type%3D25%26t%3D3%26disable_hot%3D1%26filter_type%3Drealtimehot&page_type=searchall", headers=headers, proxies=proxy)
        
    # 检测连接响应状态
    print(res.status_code)
    
    # 存储热搜文本和链接
    hot_search_list = []
    hot_search_content = requests.get(hot_search_api, headers=headers, proxies=proxy).json()
    for i in range(50):
        """获取热搜文本和链接"""
        hot_search_dict = {}
        hot_search_text = hot_search_content["data"]["cards"][0]["card_group"][i]["desc"]
        hot_search_link = hot_search_content["data"]["cards"][0]["card_group"][i]["scheme"]
        hot_search_dict["TEXT"] = hot_search_text
        hot_search_dict["LINK"] = hot_search_link
        # 存储获取的热搜文本和链接
        hot_search_list.append(hot_search_dict)
        print("第【{}】条热搜:".format(i) + hot_search_text, end="\n")
    
    # 根据需要输入对应的热搜序列
    search_num = int(input("请输入序列号(范围:0-50):"))
    search = hot_search_list[search_num]["TEXT"]
    print("您要搜索的热搜是:【" + search + "】")
    
    api_url_list = []
    # 解析每个热搜若干页的url
    parse_text = urllib.parse.quote("type=60&q=#" + search + "#&t=10&title=热门-#" + search + "#")
    parse_text_ = urllib.parse.quote("title=热门&mid=&q=#" + search + "#")
    parse_text__ = urllib.parse.quote("type=1&t=10&q=#" + search + "#")
    
    # "20" 可以根据评论数量进行调整
    for n in range(20):
        api_url_dict = {}
        parse_link = "https://m.weibo.cn/api/container/getIndex?containerid=100103" + parse_text + "&cardid=weibo_page&extparam=" + parse_text_ +"&luicode=10000011&lfid=100103" + parse_text__ + "&page={}".format(n)
        api_url_dict["【" + search + "】" + "热搜第{}页API".format(n)] = parse_link
        api_url_list.append(api_url_dict)
        # print(parse_link)
    
    # 存储每个微博的id
    blog_id_nums = []
    for v in range(len(api_url_list)):
        mblog_res = requests.get(list(api_url_list[v].values())[0], headers=headers, proxies=proxy)
        # print(a)
        mblog_res_json = mblog_res.json()
        for blog_id in range(len(mblog_res_json["data"]["cards"])):
            try:
                blog_id_num = mblog_res_json["data"]["cards"][blog_id]["mblog"]["id"]
                blog_id_nums.append(blog_id_num)
            except KeyError:
                pass
    # print(blog_id_nums)
    
    get_data_list = []
    def get_data(url):
        res_json = requests.get(url, headers=headers, proxies=proxy).json()
        # print(len(res_json["data"]["data"]))
        for p in range(len(res_json["data"]["data"])):
            try:
                comment_text = res_json["data"]["data"][p]["text"]
                # print(comment_text)
                cleaned_text = re.sub('<[^<]+?>', '', comment_text).replace('\n', '').strip()
                get_data_list.append(cleaned_text)
                print(get_data_list)
            except KeyError:
                pass
    
    for j in range(len(blog_id_nums)):
        blog_id = blog_id_nums[j]
        base_comment_url = "https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id_type=0".format(blog_id, blog_id)
    
        try:
            base_comment_url_res = get_data(base_comment_url)
            base_max_id_json = requests.get(base_comment_url, headers=headers, proxies=proxy).json()
            # print(base_max_id_json)
            base_max_id = base_max_id_json["data"]["max_id"]
            # print(base_max_id)
            comment_url = "https://m.weibo.cn/comments/hotflow?id={}&mid={}&max_id={}&max_id_type=0".format(blog_id,
                                                                                                            blog_id,
                                                                                                            base_max_id)
            comment_urlres = get_data(comment_url)
        except Exception:
            pass
    
    def split_words(text):
        text_ = ''.join(text)
        cut_text = jieba.cut(text_)
        string = ','.join(cut_text)
        # stop_words = ['str']
        word_cloud = wordcloud.WordCloud(
            font_path=r'.\simhei.ttf',
            background_color='white',
            width=500,
            height=350,
            max_font_size=100,
            min_font_size=10,
            # stopwords=stop_words,
            scale=15,
        )
        word_cloud.generate(string)
        word_cloud.to_file(r'{}.png'.format(search))
    split_words(text=get_data_list)
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    文章结语

    中华民族自古以来就是多灾多难的民族,我们的祖辈们经历过各种各样的困难,这次疫情也只不过是我们中华民族几千年历史中的一抹灰色,在这场中国人民的战争,乃至世界人民的战争中,我们一定会取得最后的胜利,我们终将胜利!
    武汉加油!中国加油!世界加油!

    展开全文
  • NodeJS爬虫微博热搜

    2020-11-03 22:28:44
    NodeJS爬虫微博热搜一、安装node,并下载依赖二、搭建服务三、请求我们要爬取的页面,返回json 一、安装node,并下载依赖 去node官网nodejs.org/zh-cn/下载node node-v查看版本号 二、搭建服务 demo.js npm ...

    一、安装node,并下载依赖

    去node官网nodejs.org/zh-cn/下载node   node-v查看版本号 
    

    二、搭建服务

    demo.js
    npm install express 安装依赖
    在这里插入图片描述

    // 引入express
    const express = require('express');
    const app = express();
    app.get('/index', function(req, res) {
    	res.end('爬虫')
    })
    var server = app.listen(8081, function() {
        var host = server.address().address
        var port = server.address().port
    })
    

    三、请求我们要爬取的页面,返回json

    请求我们要爬取的页面
    npm install superagent
    npm install superagent-charset
    npm install cheerio
    
    superagent 是用来发起请求的,是一个轻量的,渐进式的ajax api,可读性好,学习曲线低
    内部依赖nodejs原生的请求api,适用于nodejs环境下,也可以使用http发起请求
    superagent-charset防止爬取下来的数据乱码,更改字符格式 
    cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现.。 安装完依赖就可以引入了
    
    var superagent = require('superagent');
    var charset = require('superagent-charset');
    charset(superagent);
    const cheerio = require('cheerio');
    
    

    请求地址:https://s.weibo.com/top/summary
    在这里插入图片描述
    完整代码:

    var superagent = require('superagent');
    var charset = require('superagent-charset');
    charset(superagent);
    var express = require('express');
    const cheerio = require('cheerio');
    var app = express();
    app.get('/index', function(req, res) {
        //设置请求头
        res.header("Access-Control-Allow-Origin", "*");
        res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header('Access-Control-Allow-Headers', 'Content-Type');
        //类型
        var type = req.query.type;
        //页码
        var page = req.query.page;
        superagent.get('https://s.weibo.com/top/summary')
            .charset('utf-8')
            .end(function(err, sres) {
                var items = [];
                if (err) {
                    console.log('ERR: ' + err);
                    res.json({ code: 400, msg: err, sets: items });
                    return;
                }
                var $ = cheerio.load(sres.text);
                  $('div.data table tbody tr td.td-02').each(function(index, element) {
                    var $element = $(element);
                    var $a = $element.find('a');
                    items.push({
                        top: index+1,
                        title:$a.text(),
                        href: $a.attr('href'),
                        // thumbSrc: thumbImgSrc
                    });
                });
                res.json({ code: 200, msg: "", data: items });
            });
    });
    var server = app.listen(8081, function() {
        var host = server.address().address
        var port = server.address().port
    })
    
    

    node index.js 启动服务
    输入url
    返回数据:
    在这里插入图片描述

    展开全文
  • Python爬取微博热搜

    2020-08-12 20:09:23
    Python是一种跨平台的计算机程序设计语言。其是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、...
    • Python是一种跨平台的计算机程序设计语言。其是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

    • 很多人学习python,不知道从何学起。
      很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
      很多已经做案例的人,却不知道如何去学习更加高深的知识。
      那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
      QQ群:101677771

    • Time是python标准库,无需额外下载,主要用于处理时间问题。

    • Requests是一个很实用的Python HTTP客户端库。

    • Pandas是一个Python软件包,提供快速,灵活和可表达的数据结构,旨在使结构化(表格,多维,潜在异构)和时间序列数据的处理既简单又直观。

    • Lxml是一个Python库,使用它可以轻松处理XML和HTML文件,还可以用于web爬取。其主要优点是易于使用,在解析大型文档时速度非常快,归档的也非常好,并且提供了简单的转换方法来将数据转换为Python数据类型,从而使文件操作更容易。

    • 实验目标:Python爬取微博热搜

    • 实验页面图片:

     

    No.2

    实验环境

     

    • Python 3.x (面向对象的高级语言)

    • Time (python标准库)

    • Requests 2.14.2(python第三方库)

    • Pandas 1.1.0(python第三方库)

    • Lxml(python第三方库)

     

    No.3

    环境下载

     

    • Python下载

      • https://www.python.org/downloads/

    • Requests下载

      • pip3 install requests

    • Pandas 下载

      • pip3 install pandas 

    • Lxml下载

      • pip3 install lxml

    • 验证第三方库是否下载成功:

      • import time

      • import requests

      • import pandas

      • import lxml

    • 以上代码没有报错则下载成功

     

    No.4

    实验思路

     

    1. 导入所需的库

    2. 设置网址和请求头

    3. 用request.get()发送请求

    4. 用lxml.etree方法进行数据解析

    5. 用xpath方法获取目标元素

    6. 最后用pandas保存为csv文件

     

    No.5

    完整代码

     

     

    No.6

    实验结果

     

    展开全文
  • 微博热搜数据下载

    2020-06-23 22:22:42
    最近几天一直想找微博热搜数据,今天找了好久,终于找到了一个免费能下的了。 虽然数据的事件跨度只有几个月,但已经够用了。存档一下这个网站,备用。 http://www.silas.site/article_category.php?id=4 ...
  • 基于PHP爬虫的微博热搜实时监控平台

    万次阅读 多人点赞 2020-04-12 03:04:02
    基于PHP爬虫的微博热搜实时监控平台背景一、整体思路二、数据爬取1....返回数据三、数据可视化1.画柱状图2.ajax请求数据四、效果展示写在最后 背景 ...重点是,当我去搜微博热搜的时候,是这样的: 界...
  • 一个自己写的小玩意儿, 输入数字控制请求及返回值, 还有些小bug无伤大雅, 懒得改了 在linux或者子系统python运行, 需要安装几个第三方库
  • hello,因为老师给了任务,希望我们爬取一些微博上的数据,所以就想到了要爬取热搜,再根据热搜爬取评论。因为微博对过往的热搜不能根据时间进行搜索,因此这里笔者找到了一个微信公众号–热搜神器 点击历史热搜就...
  • Python爬取新浪微博热搜

    万次阅读 2018-07-12 14:45:41
    新浪微博热搜榜网址是http://s.weibo.com/top/summary,总共有50条,如图所示我们如何爬取这50条热搜呢?今天写一个简单的方法供感兴趣的朋友们参考!引用库:requestsjsonlxml.etreebs4.BeautifulSoup引用方法...
  • python爬取微博热搜

    千次阅读 2019-06-04 15:35:29
    python爬取微博热搜榜 最近应我大学室友得需求,做了一个简单的爬虫案例,先给大家看一下程序运行效果 接下来就是贴出代码了,在这里我会做一些简单说明,对如刚入门的同学可能会有所帮助,这里使用的是python3 ...
  • 闲来无聊,搞搞热搜,先拿微博练手 将爬取下来的数据发到自己的邮箱 相关的moudle通过pip install就行 效果展示 什么都是扯淡,直接贴代码 # -*- coding: utf-8 -*- #!/usr/bin/python import requests from ...
  • # -*- coding:utf-8 -*- __author__ = 'yangxin_ryan' import requests from lxml import etree class WeiBo(object): def run(self): url = "https://s.weibo.com/top/summary?Refer=top_hot&t...
  • python3 获取微博热搜词及热搜词链接

    千次阅读 2018-07-27 11:36:24
    本文实现的是从微博热搜榜http://s.weibo.com/top/summary中采用正则表达式获取微博热搜词及其链接并存储成list形式的功能。 几个注意事项: 1 微博加入了“25”混淆进行反爬虫,以热搜词'迪丽热巴粉丝 杨幂'为例...

空空如也

1 2 3 4 5 ... 20
收藏数 1,188
精华内容 475
关键字:

微博热搜