python爬取微博热搜神器,微博历史数据

步骤是:从热搜神器上获取数据,此时数据是有很多无用信息的(比如一些超链接),对数据进行处理,导出到excel。

网址为:https://weibo.zhaoyizhe.com

** 获取数据**
使用的是requests包,先定义对目标网站访问时发出的请求中包含的部分信息,包括url,headers等,以下省去了与本机相关的信息,这些在浏览器中可以查看。

# 调用要使用的包
from datetime import datetime,timedelta
import re
from openpyxl import Workbook
import requests

workbook = Workbook()
url = 'https://weibo.zhaoyizhe.com'
headers = {'User-agent':'*****',
        "Cookie":"*****",
        "Connection":"close"}
proxies = {
    "http": "47.1.40.143:16819"
    }

#获取要爬取的日期列表
def gen_dates(b_date, days):
    day = timedelta(days=1)
    for i in range(days):
        yield b_date + day*i
def get_date_list():
    """
    获取日期列表
    :param start: 开始日期
    :param end: 结束日期
    :return:
    """
    start = datetime.strptime("2019-12-31", "%Y-%m-%d").date()
    #.date()可以只截取日期
    end = datetime.now().date()
    datelist = []
    for d in gen_dates(start, (end-start).days):
        datelist.append(d)
    return datelist

#获取数据的文字部分(热搜词条)
def GetMiddleStr(content,startStr,endStr):
    patternStr = r'%s(.+?)%s'%(startStr,endStr)
    p = re.compile(patternStr,re.IGNORECASE)
    m= re.match(p,content)
    if m:
        return m.group(1)

#导出数据到excel
def export(result_list):
    excel = open('微博热搜历史备用.xlsx', 'w', encoding='gbk')
    for a in result_list:
        excel.write(a.replace(u'\xa0', u' '))
        excel.write('\n')
    excel.close()

#两个循环,外层是日期,内层是热搜
i = 0
j = 0
#存储结果的列表
final_list = []

while i<len(get_date_list()):
    date_str = str(get_date_list()[i].year)+'/'+str(get_date_list()[i].month)+'/'+str(get_date_list()[i].day)
    data = {
        'type': 'realTimeHotSearchList',
        't': '1513e084',
        'accessToken': 'HYfcS6EQ3JyJCSxU6P/erLIm4qbIxRCEInE6RIr4TnHJtYG0F2ZOCqIjuWiQkhLjXVPYoQPGUKlpyvVfg==',
        'date': date_str
        }
    r = requests.get(url, proxies=proxies, headers=headers)
    # 发送post请求
    r = requests.post(url, data=data, headers=headers)
    result = r.content.decode('utf-8')
    print(i)
    #获取到的字符串进行分片,此时result由一长串字符串变成列表
    result = result.split('},{')
    #去除首部两个字符以便后面的正则匹配
    result[0] = result[0].strip('[{')
    j = 0
    while j<len(result):
        final_list.append(GetMiddleStr(result[j], '"keyword":"','","url"'))
        j+=1
    i+=1
export(final_list)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值