python爬取美团评论
文章目录
1.确定爬取对象
2、分析网页
3、正式爬取
4、文本写入csv
1.确定爬取对象
爬取链接为:https://www.meituan.com/meishi/182559124/
2、分析网页
不管对什么网页进行爬虫,我们做的第一件事都是要先对网页进行分析,然后再对它进行抓包分析,然后再决定请求服务器的方式。
3、正式爬取
分析网页之后我们就可以进行正式的爬取我们想要的信息了。
import requests, csv
字典型,代理
headers_meituan = {
“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36”
}
创建文件夹并打开
fp = open("./美团评论_全部.csv", ‘a’, newline=’’, encoding = ‘utf-8-sig’)
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=60d8293a-8f06-4d5e-b13d-796bbda5268f&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)
# 按ctrl+},往右边回退
for item in reponse.json()[“data”][“comments”]:
name = item[“userName”]
user_id = item[“userId”]
user_url = item[“userUrl”]
comment = item[“comment”]
result = (name, user_id, user_url, comment)
writer.writerow(result)
fp.close()
然后得到:
4、文本写入csv
import requests, json, re, random, time, csv
from fake_useragent import UserAgent
starttime = time.time()#记录开始时间
ips = [] #装载有效 IP
for i in range(1, 6):
headers = {
“User-Agent” : UserAgent().chrome #chrome浏览器随机代理
}
ip_url = ‘http://www.89ip.cn/index_{}.html’.format(i)
html = requests.get(url=ip_url, headers=headers).text
res_re = html.replace(" “, “”).replace(”\n", “”).replace("\t", “”)
#使用正则表达式匹配出IP地址及端口
r = re.compile(’(.?)(.?)’)
result = re.findall(r, res_re)
for i in range(len(result)):
ip = “http://” + result[i][0] + “:” + result[i][1]
# 设置为字典格式
proxies = {“http”: ip}
#使用上面的IP代理请求百度,成功后状态码200
baidu = requests.get(“https://www.baidu.com/”, proxies = proxies)
if baidu.status_code == 200:
ips.append(proxies)
print (“正在准备IP代理,请稍后。。。”)
#创建CSV文件,并写入表头信息,并设置编码格式为“utf-8-sig”防止中文乱码
fp = open(’./美团_大学城.csv’,‘a’, newline=’’,encoding=‘utf-8-sig’) #"./"表示当前文件夹,"a"表示添加
writer = csv.writer(fp) #方式为写入
writer.writerow((‘用户ID’,‘用户名’, ‘平均价’,‘评论’,‘回复’)) #表头
for page in range(0, 371, 10):#0~100
url = ‘https://www.meituan.com/meishi/api/poi/getMerchantComment?uuid=9f45527e-2983-40c9-bc92-f58a8290c947&platform=1&partner=126&originUrl=https%3A%2F%2Fwww.meituan.com%2Fmeishi%2F193383554%2F&riskLevel=1&optimusCode=10&id=193383554&userId=&offset={}&pageSize=10&sortType=1’.format(page)
try:
headers = {
“User-Agent” : UserAgent().chrome #chrome浏览器随机代理
}
rep = requests.get(url=url, headers=headers, proxies=ips[random.randint(0 , len(ips)-1)])
print (“爬取条数:”, page)
for info in rep.json()[‘data’][‘comments’]:
userId = info[‘userId’]
userName = info[‘userName’]
avgPrice = info[‘avgPrice’]
comment = info[‘comment’]
merchantComment = info[‘merchantComment’]
data = (userId, userName, avgPrice, comment, merchantComment)
writer.writerow((data))
except:
print (“这里发生异常:”, url)
pass
fp.close() #关闭文件
endtime = time.time()#获取结束时间
sumTime = endtime - starttime #总的时间
print (“一共用的时间是%s秒”%sumTime)