1. 程式人生 > >python2.7+anaconda爬蟲爬取美團商家資訊

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表中。