Python爬虫---微博热搜TOP50

Python爬虫—微博热搜TOP50

这次我做的是获取的是微博热搜TOP50,作为一个小白,做知名网站的内容爬取也是胆战心惊的,话不多说,我们开始吧

附上源代码,仅供参考!

首先是导入爬虫常用的包
不过这次多了一个不太常用到的,用处是对中文进行url编码

import re
import time
import requests
# url编码和解码
from urllib import parse

这其中虽然感觉功能是实现了,但是存在冗余代码(个人认为),也有一些不足的地方

def get_text(url):
    resp = requests.get(url)
    hot_list = re.findall(r'[ep]"\starget=".*">(.*[\u4e00-\u9fa5])', resp.text)
    return hot_list


def get_heat(url):
    resp = requests.get(url)
    heat_list = re.findall(r'.*?(\d*)', resp.text)
    return heat_list


def Search():
    try:
        decision = int(input("\n是否使用关键词搜索功能(1 or 0):"))
        if decision == 1:
            char = input("请输入微博搜索关键词:")
            print('已获取链接:' + 'https://s.weibo.com/weibo?q=%23{}&Refer=top'.format(parse.quote(char)))
        elif decision == 0:
            print("程序结束")
        else:
            print("不正确输入")
    except ValueError as result:
        print("只能输入0和1")
    except Exception:
        pass


def main(url):
    hot_list = get_text(url)  # 获取热闻
    heat_list = get_heat(url)  # 获取热闻热度
    hot_line_list = []
    print("------------------微博实时热搜TOP50------------------")
    for i in range(hot_list.__len__()):
        # parse.quote(hot_list[i]) 对hot_list[i]进行编码操作
        hot_line_list.append('https://s.weibo.com/weibo?q=%23{}&Refer=top'.format(parse.quote(hot_list[i])))

        print("[" + format(i + 1) + "]:" + hot_list[i] + '[' + heat_list[i] + ']' + '\n\t\t\t' + hot_line_list[i])



if __name__ == '__main__':
    # 微博热搜TOP50
    url = 'https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6'
    main(url)
    print('\n当前时间:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    print("\t\t\t\t————来源于-微博实时热搜-")
    Search()


以上就是完整的代码了,小白练手,仅供参考!

总结:
1、我觉得还得重新去习惯面对对象的编程思维,由于启蒙语言是C,转变不太顺利,差点火候
2、对正则表达式的处理还有问题,虽然可以简单写出表达式,但是距离理想的形式,中间还是需要做一些数据处理,目前掌握的还不是很理想,希望有大佬可以指导一下

可能还会有其他的问题,我本人没有看出来的,也希望大家指出!

注:正则表达式方面已改进,减少部分冗余代码

你可能感兴趣的:(正则表达式,python)