爬虫仅限于知识学习,本代码不得用于任何商业活动侵权,如有不适,请联系博主进行修改或者删除。
我选择的是关键词“非遗”,你可以自己选择需要的关键词。
代码如下:
import json
import requests
from urllib.parse import urlencode
import time
import random
import openpyxl
def getUrl():
userList = []
#一次获得12个用户信息,如果想获得1200个用户数据就填range(100)
for i in range(100):
#设置一下,每隔1~10秒,获取一次请求,防止被封ip
randTime =random.randint(1,10)
time.sleep(randTime)
#每次获得12个用户信息
preUrl = '####第十步会讲怎么获取'
params = {'offset': 12*i, 'count': 12}# 查询参数
needChangeUrl = urlencode(params)#'offset=0&count=30'
rearUrl = '#####第十步会讲怎么获取'
url = preUrl + needChangeUrl + rearUrl
#模拟浏览器headers
headers = {
'Host': 'www.douyin.com',
'Connection': 'keep-alive',
'sec-ch-ua': 'Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24',
'Accept': 'application/json, text/plain, */*',
'sec-ch-ua-mobile': '?0',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"Windows"',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Dest': 'empty',
'Referer': url,
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': '######',
}
# 利用requests发送请求,印象中遇到了SSL、443之类的错误,很多时候是由于没有设置verify字段导致的。
res = requests.get(url, headers=headers, verify=False)
print(res)
# res.text是响应结果,json字符串形式
strText = res.text
print(strText)
# 解析json字符串,转换为字典,方便python读取现需要的字段。
dict = json.loads(strText)
print(dict)
#调用函数
spader(dict,userList)
saveToExcel(userList)
#根据获取的json数据解析字段并保存
def spader(dict,userList):
# 字典中,user_list字段存储了用户的基本信息,其内部又包含了很多详细信息。
for i in range(len(dict['user_list'])):
#名称
the_name = dict['user_list'][i]['user_info']['nickname']
print("名称:" ,the_name)
#抖音号
unique_id = dict['user_list'][i]['user_info']['unique_id']
print("抖音号:" ,unique_id)
#简介
signature = dict['user_list'][i]['user_info']['signature']
print("简介:" ,signature)
#粉丝数
follower_count = dict['user_list'][i]['user_info']['follower_count']
print("粉丝数:" ,follower_count)
#获赞数
total_favorited = dict['user_list'][i]['user_info']['total_favorited']
print("获赞数:" ,total_favorited)
#官方认证
versatile_display = dict['user_list'][i]['user_info']['versatile_display']
print("官方认证:" ,versatile_display)
userinfo= [the_name,unique_id,signature,follower_count,total_favorited,versatile_display]
userList.append(userinfo)
#return userList
#保存到Excel表格中
def saveToExcel(userList):
# 创建一个工作簿
workbook = openpyxl.Workbook()
# 选择默认的工作表
sheet = workbook.active
sheet.append(['名称','抖音号','简介','粉丝数','获赞数','官方认证'])
# 将数据逐行写入工作表
for row in userList:
sheet.append(row)
# 保存工作簿到指定文件路径
workbook.save('output.xlsx')
if __name__ == "__main__":
getUrl()
保姆级教程
代码需要改的地方就两个
1、url
2、headers
第一步、浏览器进入网页版,搜索要查找的内容,进入用户这。
第二步、按电脑上f12键,调出开发者模式,选择network,并搜索关键词
第三步、现在查找关键词肯定还没有东西,那是因为最开始的网络包,没有抓取到。
第四步、那就再点一次搜索按钮
第五步
第六步、我们在旁边就能看到我们需要的东西了,在response里。
第七步、我们来找URL,看到这个headers了吧。里面的request Url,就是教程最开始需要的URL。绿色部分很重要,待会解答具体(可以看第十步)
第八步、我们来找headers,一直往下找,找到request headers,里面就是所需要的全部内容了。
第九步、把内容填到代码的对应地方。Referer不要动,它是直接用现成的Url。
第十步、在这个request url里面,绿色部分有两个参数,offset表示偏移量,也就是说从第0个用户开始读,count表示一次读10个。这里offset我们循环给它赋值,count可以自己赋值,我试了10-30都行,你可以自己试试。
第十一步、看我代码,preUrl就是上面图中绿色方框前面的内容,rearUrl就是绿色方框后面的内容。needChangeUrl就是绿色方框的部分,需要给它赋值。
参考链接
发表评论