这次我做的是获取的是微博热搜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、对正则表达式的处理还有问题,虽然可以简单写出表达式,但是距离理想的形式,中间还是需要做一些数据处理,目前掌握的还不是很理想,希望有大佬可以指导一下
可能还会有其他的问题,我本人没有看出来的,也希望大家指出!
注:正则表达式方面已改进,减少部分冗余代码