# 爬取美团数据_评论和店家信息 **Repository Path**: beyondzy/reptile ## Basic Information - **Project Name**: 爬取美团数据_评论和店家信息 - **Description**: 基于Python的爬虫 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-03-01 - **Last Updated**: 2022-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## beyondzy所建立的 + 请求地址 + https://www.meituan.com/meishi/api/poi/getMerchantComment?uuid=1b79073647414959b763.1646094495.1.0.0&platform=1&partner=126&originUrl=https%3A%2F%2Fwww.meituan.com%2Fmeishi%2F194681701%2F&riskLevel=1&optimusCode=10&id=194681701&userId=2946395421&offset=0&pageSize=10&sortType=1 + ![image-20220301091405029](C:\Users\Beyondzy\AppData\Roaming\Typora\typora-user-images\image-20220301091405029.png) + 正式开始爬取 + 创建新的新的csv 文件夹,进行保存 > csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。csv文件用记事本和excel都能打开,用记事本打开显示逗号,用excel打开,没有逗号了,逗号都用来分列了,还可有Editplus打开。 + Python中csv文件的创建,读取,修改 + 创建: ```python import csv headers = ['学号','姓名','分数'] rows = [('202001','张三','98'), ('202002','李四','95'), ('202003','王五','92')] ## w 以写方式打开,a 以追加模式打开 (从 EOF 开始, 必要时创建新文件),r+ 以读写模式打开 with open('score.csv','w',encoding='utf8',newline='') as f : ##确定写入格式1 writer = csv.writer(f) writer.writerow(headers) writer.writerows(rows) ``` + 写入(**要灵活使用','、'\n'、append()等** ```python csv = [] for line in lines: scores = result[line[0]] for wav, scores in scores.items(): # csv.append(line[0]) # csv.append(wav) # csv.append(str(i) for i in scores) # csv.append('\n') #csv.append(','.join([wav] + [str(i) for i in scores] + '\n')) csv.append(line[0] +','+ wav ) for i in scores: csv.append(','+ str(i)) csv.append('\n') with open('task3-result.csv', 'w') as f: f.writelines(csv) ``` + 读取数据 ```python import pandas as pd my_matrix = pd.read_csv('score.csv')#,header=None,index_col=None) ''' header : int or list of ints, default ‘infer’,指定行数用来作为列名,数据开始行数。 index_col : int or sequence or False, default None,用作行索引的列编号或者列名 ''' print(my_matrix) print(my_matrix.shape) ``` + 将数据改成np.array型 ```python import pandas as pd import numpy as np my_matrix = pd.read_csv('score.csv')#,header=0,index_col=0) my_matrix = np.array(my_matrix) print(my_matrix) print(my_matrix.shape) print(my_matrix[0][0]) ``` > ![img](https://img-blog.csdnimg.cn/20201112194748144.png) ## respone.json() + response.json() 是把返回响应的json字符串转换成字典。 response.json() 等同于 json.loads(response.text) text/plain是无格式正文,意思是将文件设置为纯文本的形式。跟接口返回什么类型的数据并没有直接的关系。 4 ## range()函数 + 创建一个整数列表,一般用于for循环中 + 语法: + ```python range(start, stop[, step]) ``` + start:计数从start开始 + 到stop结束 + step表示步长 + 请求地址 ` https://apimobile.meituan.com/group/v4/poi/pcsearch/1?uuid=1b79073647414959b763.1646094495.1.0.0&userid=2946395421&limit=32&offset=32&cateId=-1&q=%E7%81%AB%E9%94%85&token=k_Bqy39_q-yqJPwvcxapq_aYGIIAAAAAjBAAAINVx6mlSf-Frgfag_IaaeBEqOKnt6JlnGlsY8lMCXfJQcWg7HHiYRpEVxejTVfMNA` + 请求头 ```java Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-TW;q=0.6 Connection: keep-alive Cookie: uuid=1b79073647414959b763.1646094495.1.0.0; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; _lxsdk_cuid=17f42e0b524c8-07f56a515080c1-a3e3164-1fa400-17f42e0b524c8; WEBDFPID=8xv8wwuwyyzx5z38zwv6396v0w017w1182u57v9x731979582uwx7643-1646180901041; mtcdn=K; lt=k_Bqy39_q-yqJPwvcxapq_aYGIIAAAAAjBAAAINVx6mlSf-Frgfag_IaaeBEqOKnt6JlnGlsY8lMCXfJQcWg7HHiYRpEVxejTVfMNA; u=2946395421; n=vxl805079915; token2=k_Bqy39_q-yqJPwvcxapq_aYGIIAAAAAjBAAAINVx6mlSf-Frgfag_IaaeBEqOKnt6JlnGlsY8lMCXfJQcWg7HHiYRpEVxejTVfMNA; unc=vxl805079915; _lxsdk=17f42e0b524c8-07f56a515080c1-a3e3164-1fa400-17f42e0b524c8; _hc.v=a193fdd0-b0fd-9fef-29e7-e8b21376df71.1646094586; lat=26.408225; lng=106.669397; ci=1; rvct=1%2C70; firstTime=1646101142718; _lxsdk_s=17f43461c0c-a8c-98-812%7C%7C33 Host: apimobile.meituan.com Origin: https://bj.meituan.com Referer: https://bj.meituan.com/ sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Sec-Fetch-Dest: empty Sec-Fetch-Mode: cors Sec-Fetch-Site: same-site User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 ``` > 思路如下: > > ​ 确定要爬取的url地址,并且知道url的变化规律 > > ​ 进行请求,url和请求头 > > ​ 得到响应中的数据 > > ​ 使用正则或者是json > > ​ \#正则获取当前响应内容中的数据,因json方法无法针对店铺特有的title键值进行获取没所以采用正则 > > ​ 遍历将获得的值写入文件中 ## Python正则表达式 + 正则表达式是一个特殊的字符序列,它能帮助你方便的**检查一个字符串是否与某种模式匹配**。 ### re.match()函数 `re.match(pattern, string, flags=0)` > pattern 匹配的指针表达式 > > string 要匹配的字符串 > > flag :标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 > > 匹配到返回一个匹配的对象,否则返回none ### re.group方法 + groups() 返回所有元祖 + group() 返回匹配的字符串 + group(int ) 返回对应的元祖 ### re.search方法 ```Python re.search(pattern, string, flags=0) ``` > 匹配成功re.search方法返回一个匹配的对象,否则返回None。 > > 我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。 ### [re.findall方法](https://www.runoob.com/python/python-reg-expressions.html) 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。 **注意:** match 和 search 是匹配一次 findall 匹配所有。 > ```python > findall(string[, pos[, endpos]]) > #string 待匹配字符串 > #pos 开始位置 > #endpos 结束位置 > ``` ​