python2.7+anaconda爬虫爬取美团商家信息
第一步,打开美团
网https://chs.meituan.com/(谷歌浏览器)——点击右键检查——点击左中箭头——选中文字美食<a href=http://chs.meituan.com/meishi/,接下来我们把这些url爬取下来
def get_start_links(url):
html=requests.get(url).text#发送请求获取主页文本
print html
soup=BeautifulSoup(html,'lxml')#解析网页
links=[link.find('span').find('a')['href'] for link in soup.find_all('span',class_='nav-text-wrapper')]
print links
return links
第二步,获取以上url,以http://chs.meituan.com/meishi/为例,在检查网页源代码时,发现每个商家都有一个属于自己的poiId,如图所示
而我们发现上个页面商家信息不全面,缺少电话,经纬度信息,选取转转乐涮涮锅点进去,发现url变为http://chs.meituan.com/meishi/5140661/,5140661就是此商家的poiId,此页面中商家信息是完整的。
所以,我们要获得此页面的url,必须先获取商家的poiId
def get_detail_id(category_url):
html=requests.get(category_url,headers=headers).text
#print html
soup=BeautifulSoup(html,'lxml')#解析网页
#print soup
texts=soup.find_all('script')
#print texts
text=texts[14].get_text().strip()#特别说明,这里其实可以用正则表达式,不过我不会,用了笨方法
#print text
text=text[19:-1]
result1=json.loads(text,encoding='utf-8')
#print result1
result2=result1['poiLists']
result3=result2['poiInfos']
#print result3
Info_list=[]
for it in result3:
#print it
Info_list.append(it['poiId'])
#Info_list.append(it['address'])
#Info_list.append(it['avgScore'])
#Info_list.append(it['avgPrice'])
#print Info_list
return Info_list
第三步,获取商家信息-右键点击查看网页源代码可以看到商家信息,所以我们需要做的就是把网页源代码的商家信息截取出来
def get_item_info(url):
#print url
headers={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language':'zh-CN,zh;q=0.9',
'Cache-Control':'max-age=0',
'Proxy-Connection':'keep-alive',
'Host':'chs.meituan.com',
'Referer':'http://chs.meituan.com/',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
'Content-Type':'text/html;charset=utf-8',
'Cookie':'_lxsdk_cuid=164c9bed44ac8-0bf488e0cbc5d9-5b193413-1fa400-164c9bed44bc8; __mta=248363576.1532393090021.1532393090021.1532393090021.1; rvct=70%2C1; ci=70; iuuid=30CB504DBAC7CCDD72645E3809496C48229D8143D427C01A5532A4DDB0D42388; cityname=%E9%95%BF%E6%B2%99; _lxsdk=30CB504DBAC7CCDD72645E3809496C48229D8143D427C01A5532A4DDB0D42388; _ga=GA1.2.1889738019.1532505689; uuid=2b2adb1787947dbe0888.1534733150.0.0.0; oc=d4TCN9aIiRPd6Py96Y94AGxfsjATZHPGsCDua9-Z_NQHsXDcp6WlG2x7iJpYzpSLttNvEucwm_D_SuJ7VRJkLcjqV6Nk8s_q3VyOJw5IsVJ6RJPL3qCgybGW3vxTkMHr9A4yChReTafbZ7f93F1PkCyUeFBQV4D-YXoVoFV5h3o; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; client-id=97664882-24cd-4743-b21c-d25de878708e; lat=28.189822; lng=112.97422; _lxsdk_s=165553df04a-bc8-311-ba7%7C%7C6',
}
html=requests.get(url,headers=headers).text
soup=BeautifulSoup(html,'lxml')
texts=soup.find_all('script')
#print texts
text2=texts[15].get_text().strip()#特别说明,这里其实可以用正则表达式,不过我不会,用了笨方法
#print text2
text=text2[19:-1]
result4=json.loads(text,encoding='utf-8')
#print result4
result5=result4['detailInfo']
it=result5
#print result5
Info_list=[]
Info_list.append(it['name'])
Info_list.append(it['address'])
Info_list.append(it['phone'])
Info_list.append(it['longitude'])
Info_list.append(it['latitude'])
print Info_list
return Info_list
第四步,把获取的商家信息写入excel表中。
说明:该代码已经上传至****资源下载中https://download.****.net/download/lxy_1204/10618037,最新可用,如有问题,可留言,大家互相学习,共同进步。