最近在学习python的爬虫知识,分享一个爬取微博热搜的实例,代码很简单。
用到了requests,re,xlwt库
直接看图:
#1导入模块
import requests
import re
import xlwt
#2定制请求头
url="https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&wvr=6"
headers={
"user-agent":""
,"cookie":""
}
#3获取网页数据
r=requests.get(url,headers=headers)
r.encoding=r.apparent_encoding
print(r.status_code)
html=r.text
#4用正则提取排名,热搜内容,热度等信息
datalist=[]
rank=re.findall(r'(.*) ',html)
name=re.findall(r'(.*?)',html)[1:51]
hot=re.findall(r'(.*?)',html)[1:51]
datalist.append(rank)
datalist.append(name)
datalist.append(hot)
#5保存数据
book=xlwt.Workbook(encoding="utf-8")
sheet=book.add_sheet("微博热搜",cell_overwrite_ok=True)
head=("排名","内容","热度")
for i in range(0,3):
sheet.write(0,i,head[i])
for j in range(len(datalist)):
data=datalist[j]
for i in range(len(rank)):
sheet.write(i+1,j,data[i])
book.save("微博热搜.xls")
注意:1请求头一定要带urer-agent和cookie的参数,这里我没有填写需要自己填进去,打开热搜点击F12打开开发者工具,选中network,参看那里面的请求参数urer-agent和cookie都有。
2一般热搜榜是显示50条,用正则表达式提取的时候,排名刚好提取出50个,热度和内容可能不止50条很容易把最前面那条也提取出来,所以可以在后面加上范围[1:51]表示拿第1条到第50条,去除第0个。



