《python爬取美团评论》

文章目录

  • 1.确定爬取对象
  • 2、分析网页
  • 3、正式爬取
  • 4、文本写入csv

1.确定爬取对象

爬取链接为:一桥海鲜自助烧烤广场

2、分析网页

不管对什么网页进行爬虫,我们做的第一件事都是要先对网页进行分析,然后再对它进行抓包分析,然后再决定请求服务器的方式。
《python爬取美团评论》_第1张图片

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()

结果为:
《python爬取美团评论》_第2张图片

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)

结果为:
《python爬取美团评论》_第3张图片
爬取结束。

你可能感兴趣的:(《python爬取美团评论》)