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