《python美团抓包》
美团商铺链接:https://www.meituan.com/meishi/193383554/
点击下一页,url链接没有发生变换,初步判断是ajax加载的数据,需要用抓包的方式来爬取数据。
首先检查网页
找到自己需要的内容,如何找到自己需要的东西,注意Network中的Type(加载文件类型)和size(加载的文件大小),是文本文件还是音频文件还是图片根据type区分,其次观察文件大小。
将文件的的link address复制到浏览器可以加载文件内容。
在Preview中也可以查看到文件里是否有自己需要的东西。
解析网站:https://www.json.cn/
import requests
# 格式化为字符串
ajax_url="https://www.meituan.com/meishi/api/poi/getMerchantComment?uuid=8ecdf9f4-b8dc-442b-805e-d6e95ef4d06d&platform=1&partner=126&originUrl=https%3A%2F%2Fwww.meituan.com%2Fmeishi%2F193383554%2F&riskLevel=1&optimusCode=10&id=193383554&userId=&offset=10&pageSize=10&sortType=1"
#设置浏览器代理,它是一个字典
headers_meituan={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"
}
# 请求源代码,向服务器发出请求
reponse=requests.get(url=ajax_url,headers=headers_meituan)
# 快捷键运行,Ctrl+Enter
print(reponse)
在json解析器中找到需要爬取的内容标签
利用for循环爬出标签里面的内容
for item in reponse.json()["data"]["comments"]:
name=item["userName"]
comment=item["comment"]
user_id=item["userId"]
result=(name,user_id,comment)
print(result)
for num in range(0,381,10):
ajax_url="https://www.meituan.com/meishi/api/poi/getMerchantComment?uuid=26ef241e-0867-4013-94f0-452bea9fab76&platform=1&partner=126&originUrl=https%3A%2F%2Fwww.meituan.com%2Fmeishi%2F193383554%2F&riskLevel=1&optimusCode=10&id=193383554&userId=&offset="+ str(num) +"&pageSize=10&sortType=1"
print(ajax_url)
三部曲
第一步:打开文件夹
第二步:放进文件
第三部:关闭文件夹
import csv
#创建文件夹并打开
fp = open('./美团_大学城.csv','a', newline='',encoding='utf-8-sig')
writer=csv.writer(fp)
#写入
writer.writerow(('用户名','用户ID', '评论'))
#关闭文件
fp.close()
import csv,requests
#代理,字典型
headers_meituan={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36"
}
fp = open('./美团_大学城.csv','a', newline='',encoding='utf-8-sig') #"./"表示当前文件夹,"a"表示添加
writer = csv.writer(fp) #方式为写入
writer.writerow(('用户名','用户ID', '评论'))
#循环链接
for num in range(0,381,10):
print("正在爬取%s条......"%num)
ajax_url="https://www.meituan.com/meishi/api/poi/getMerchantComment?uuid=26ef241e-0867-4013-94f0-452bea9fab76&platform=1&partner=126&originUrl=https%3A%2F%2Fwww.meituan.com%2Fmeishi%2F193383554%2F&riskLevel=1&optimusCode=10&id=193383554&userId=&offset="+ str(num) +"&pageSize=10&sortType=1"
print(ajax_url)
#请求链接
reponse=requests.get(url=ajax_url,headers=headers_meituan)
for item in reponse.json()["data"]["comments"]:
name=item["userName"]
comment=item["comment"]
user_id=item["userId"]
result=(name,user_id,comment)
writer.writerow(result)
print(result)
fp.close()