全國315個城市,用python爬取肯德基老爺爺的店面信息

来源:https://www.cnblogs.com/python0921/archive/2020/04/29/12804244.html
-Advertisement-
Play Games

我覺得我生活在這世上二十多年裡,去過最多的餐廳就是肯德基小時候逢生日必去,現在長大了,肯德基成了我的日常零食下班後從門前路過餓了便會進去點分黃金雞塊或者小吃拼盤早上路過,會買杯咖啡。主要快捷美味且飽腹,而且到處都是總是會路過,現在只要一餓,心心念念便是肯德基的味道 環境介紹 python 3.6 p ...


 

 

我覺得我生活在這世上二十多年裡,去過最多的餐廳就是肯德基小時候逢生日必去,現在長大了,肯德基成了我的日常零食下班後從門前路過餓了便會進去點分黃金雞塊或者小吃拼盤早上路過,會買杯咖啡。主要快捷美味且飽腹,而且到處都是總是會路過,現在只要一餓,心心念念便是肯德基的味道

環境介紹

python 3.6

pycharm

requests

csv

爬蟲的一般思路

1、確定爬取的url路徑,headers參數

2、發送請求 -- requests 模擬瀏覽器發送請求,獲取響應數據

3、解析數據

4、保存數據

步驟

1、確定爬取的url路徑,headers參數

先爬取北京的數據

 

 

base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'}
data = {
    'cname': '',
    'pid': '',
    'keyword': '北京',
    'pageIndex': '1',
    'pageSize': '10',
}

 

2、發送請求 -- requests 模擬瀏覽器發送請求,獲取響應數據

response = requests.post(url=base_url, headers=headers, data=data)
json_data = response.json()
# pprint.pprint(json_data)

 

3、解析數據

 

 

 

data_list = json_data['Table1']
# pprint.pprint(data_list)
# 構建迴圈,解析數據欄位
for ls in data_list:
    storeName = ls['storeName'] + '餐廳'  # 餐廳名稱
    cityName = ls['cityName']  # 餐廳城市
    addressDetail = ls['addressDetail']  # 餐廳地址
    pro = ls['pro']  # 餐廳詳情
    # print(storeName, cityName, addressDetail, pro)

 

4、保存數據

 

 
 print('正在爬取:', storeName)
    with open('data.csv', 'a', newline='') as csvfile:  # newline=''  指定一行一行寫入
        csvwriter = csv.writer(csvfile, delimiter=',')  # delimiter=','  csv數據的分隔符
        csvwriter.writerow([storeName, cityName, addressDetail, pro])  # 序列化數據,寫入csv

 

5、全國315個城市的數據

獲取拉勾網315個城市的數據

 

 

 

 

# coding:utf-8
import requests
import csv
import time
import random

ip = [{'HTTP': '1.199.31.213:9999'}, {'HTTP': '182.46.197.33:9999'}, {'HTTP': '58.18.133.101:56210'},
      {'HTTP': '175.44.108.123:9999'}, {'HTTP': '123.52.97.90:9999'}, {'HTTP': '182.92.233.137:8118'},
      {'HTTP': '223.242.225.42:9999'}, {'HTTP': '113.194.28.84:9999'}, {'HTTP': '113.194.30.115:9999'},
      {'HTTP': '113.195.19.41:9999'}, {'HTTP': '144.123.69.123:9999'}, {'HTTP': '27.192.168.202:9000'},
      {'HTTP': '163.204.244.179:9999'}, {'HTTP': '112.84.53.197:9999'}, {'HTTP': '117.69.13.69:9999'},
      {'HTTP': '1.197.203.214:9999'}, {'HTTP': '125.108.111.22:9000'}, {'HTTP': '171.35.169.69:9999'},
      {'HTTP': '171.15.173.234:9999'}, {'HTTP': '171.13.103.52:9999'}, {'HTTP': '183.166.97.201:9999'},
      {'HTTP': '60.2.44.182:44990'}, {'HTTP': '58.253.158.21:9999'}, {'HTTP': '47.94.89.87:3128'},
      {'HTTP': '60.13.42.235:9999'}, {'HTTP': '60.216.101.46:32868'}, {'HTTP': '117.90.137.91:9000'},
      {'HTTP': '123.169.164.163:9999'}, {'HTTP': '123.169.162.230:9999'}, {'HTTP': '125.108.119.189:9000'},
      {'HTTP': '163.204.246.68:9999'}, {'HTTP': '223.100.166.3:36945'}, {'HTTP': '113.195.18.134:9999'},
      {'HTTP': '163.204.245.50:9999'}, {'HTTP': '125.108.79.50:9000'}, {'HTTP': '163.125.220.205:8118'},
      {'HTTP': '1.198.73.246:9999'}, {'HTTP': '175.44.109.51:9999'}, {'HTTP': '121.232.194.47:9000'},
      {'HTTP': '113.194.30.27:9999'}, {'HTTP': '129.28.183.30:8118'}, {'HTTP': '123.169.165.73:9999'},
      {'HTTP': '120.83.99.190:9999'}, {'HTTP': '175.42.128.48:9999'}, {'HTTP': '123.101.212.223:9999'},
      {'HTTP': '60.190.250.120:8080'}, {'HTTP': '125.94.44.129:1080'}, {'HTTP': '118.112.195.91:9999'},
      {'HTTP': '110.243.5.163:9999'}, {'HTTP': '118.89.91.108:8888'}, {'HTTP': '125.122.199.13:9000'},
      {'HTTP': '171.11.28.248:9999'}, {'HTTP': '211.152.33.24:39406'}, {'HTTP': '59.62.35.130:9000'},
      {'HTTP': '123.163.96.124:9999'}]


def get_page(keyword):
    global base_url
    base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    global headers
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'}
    data = {
        'cname': '',
        'pid': '',
        'keyword': keyword,
        'pageIndex': '1',
        'pageSize': '10',
    }
    try:
        response = requests.post(url=base_url, headers=headers, data=data)
        json_data = response.json()
        page = json_data['Table'][0]['rowcount']

        if page % 10 > 0:
            page_num = page // 10 + 1
        else:
            page_num = page // 10

        return page_num
    except Exception as e:
        print(e)




def send_request(keyword):
    page_num = get_page(keyword)

    try:
        for page in range(1, page_num + 1):
            print('============正在獲取第{}頁信息=========='.format(page))
            data = {
                'cname': '',
                'pid': '',
                'keyword': keyword,
                'pageIndex': str(page),
                'pageSize': '10',
            }

            response = requests.post(url=base_url, headers=headers, data=data, proxies=random.choice(ip),timeout=3)

            json_data = response.json()
            # pprint.pprint(json_data)
            time.sleep(0.4)

            # 3、解析數據
            data_list = json_data['Table1']
            # pprint.pprint(data_list)

            # 構建迴圈,解析數據欄位
            for ls in data_list:
                storeName = ls['storeName'] + '餐廳'  # 餐廳名稱
                cityName = ls['cityName']  # 餐廳城市
                addressDetail = ls['addressDetail']  # 餐廳地址
                pro = ls['pro']  # 餐廳詳情
                # print(storeName, cityName, addressDetail, pro)

                # 4、保存數據
                print('正在爬取:', storeName)
                with open('data5.csv', 'a', newline='') as csvfile:  # newline=''  指定一行一行寫入
                    csvwriter = csv.writer(csvfile, delimiter=',')  # delimiter=','  csv數據的分隔符
                    csvwriter.writerow([storeName, cityName, addressDetail, pro])  # 序列化數據,寫入csv
            time.sleep(0.2)
    except Exception as e:
        print(e)


if __name__ == '__main__':
    # https://www.lagou.com/lbs/getAllCitySearchLabels.json
    all_cities = ['安陽', '安慶', '鞍山', '澳門特別行政區', '安順', '阿勒泰', '安康', '阿克蘇', '阿壩藏族羌族自治州', '阿拉善盟', '北京', '保定', '蚌埠', '濱州',
                  '包頭', '寶雞', '北海', '亳州', '百色', '畢節', '巴中', '本溪', '巴音郭楞', '巴彥淖爾', '博爾塔拉', '保山', '白城', '白山', '成都', '長沙',
                  '重慶', '長春', '常州', '滄州', '赤峰', '郴州', '潮州', '常德', '朝陽', '池州', '滁州', '承德', '昌吉', '楚雄', '崇左', '東莞', '大連',
                  '德州', '德陽', '大慶', '東營', '大同', '達州', '大理', '德巨集', '丹東', '定西', '儋州', '迪慶', '鄂州', '恩施', '鄂爾多斯', '佛山',
                  '福州', '阜陽', '撫州', '撫順', '阜新', '防城港', '廣州', '貴陽', '桂林', '贛州', '廣元', '貴港', '廣安', '固原', '甘孜藏族自治州', '杭州',
                  '合肥', '惠州', '哈爾濱', '海口', '呼和浩特', '邯鄲', '衡陽', '湖州', '淮安', '海外', '菏澤', '衡水', '河源', '懷化', '黃岡', '黃石',
                  '黃山', '淮北', '淮南', '葫蘆島', '呼倫貝爾', '漢中', '紅河', '賀州', '河池', '鶴壁', '鶴崗', '海東', '哈密', '濟南', '金華', '嘉興',
                  '濟寧', '江門', '晉中', '吉林', '九江', '揭陽', '焦作', '荊州', '錦州', '荊門', '吉安', '景德鎮', '晉城', '佳木斯', '酒泉', '濟源',
                  '昆明', '開封', '克拉瑪依', '喀什', '蘭州', '臨沂', '廊坊', '洛陽', '柳州', '六安', '聊城', '連雲港', '呂梁', '瀘州', '拉薩', '麗水',
                  '樂山', '龍岩', '臨汾', '漯河', '六盤水', '涼山彞族自治州', '麗江', '婁底', '萊蕪', '遼源', '隴南', '臨夏', '來賓', '綿陽', '茂名', '馬鞍山',
                  '梅州', '牡丹江', '眉山', '南京', '寧波', '南昌', '南寧', '南通', '南陽', '南充', '寧德', '南平', '內江', '莆田', '濮陽', '萍鄉',
                  '平頂山', '盤錦', '攀枝花', '平涼', '普洱', '青島', '泉州', '清遠', '秦皇島', '曲靖', '衢州', '齊齊哈爾', '黔西南', '黔南', '欽州', '黔東南',
                  '慶陽', '七台河', '日照', '深圳', '上海', '蘇州', '沈陽', '石家莊', '紹興', '汕頭', '宿遷', '商丘', '三亞', '上饒', '宿州', '邵陽',
                  '十堰', '遂寧', '韶關', '三門峽', '汕尾', '隨州', '三沙', '三明', '綏化', '石嘴山', '四平', '朔州', '商洛', '松原', '天津', '太原',
                  '唐山', '台州', '泰安', '泰州', '天水', '通遼', '銅陵', '臺灣', '銅仁', '銅川', '鐵嶺', '塔城', '天門', '通化', '武漢', '無錫', '溫州',
                  '濰坊', '烏魯木齊', '蕪湖', '威海', '梧州', '渭南', '吳忠', '烏蘭察布', '文山', '烏海', '西安', '廈門', '徐州', '新鄉', '西寧', '咸陽',
                  '許昌', '邢台', '孝感', '襄陽', '香港特別行政區', '湘潭', '信陽', '忻州', '咸寧', '宣城', '西雙版納', '湘西土家族苗族自治州
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 描述 眾所周知,任何一個表達式,都可以用一棵表達式樹來表示。例如,表達式a+b c,可以表示為如下的表達式樹: + / \\ a \ / \\ b c 現在,給你一個中綴表達式,這個中綴表達式用變數來表示(不含數字),請你將這個中綴表達式用表達式二叉樹的形式輸出出來。 輸入 輸入分為三個部分。 第一 ...
  • #! /usr/bin/env python#Version: pyyhon 3.x#Author : Syno''' 1st layer: chinese provinces Anhui 2nd layer: Hefei 3rd layer: Jingkai Area Binghu Area... ...
  • 問題描述 生產者消費者問題(英語:Producer-consumer problem),也稱有限緩衝問題(英語:Bounded-buffer problem),是一個多進程同步問題的經典案例。 該問題描述了共用固定大小緩衝區的兩個進程——即所謂的“生產者”和“消費者”——在實際運行時會發生的問題。生 ...
  • 本文的模型使用了C++工具箱dlib基於深度學習的最新人臉識別方法,基於戶外臉部數據測試庫Labeled Faces in the Wild 的基準水平來說,達到了99.38%的準確率。 dlib:http://dlib.net/ 數據測試庫Labeled Faces in the Wild:htt ...
  • 1 #include <iostream> 2 3 using namespace std; 4 5 class Matrix 6 { 7 private: 8 int a,b; 9 int arr[100][100]; 10 public: 11 Matrix() 12 { 13 for(int ...
  • 問題:Mac,php7.2,nginx 重啟php-fpm,多次運行killall php-fpm,或者一個一個的kill -9之後,再查看進程ps aux | grep php-fpm,php-fpm進程還在…… 參考網址:http://blog.haohtml.com/archives/1897 ...
  • 場景: 有一個表中的某一列,你需要獲取到這一列的所有值,你怎麼操作? 解決辦法: 有一個model為:Event 方式一: 方式一獲取到的是一個 ,內容是鍵值對構成的,鍵為表的列名,值為對應的每個值。 方式二: 方式二獲取到的也是一個 ,但是內容是元祖形式的查詢列的值。 但是我們想要的是這一列的值呀 ...
  • String 字元串 一個字元串是由一系列字元組成的。其中每個字元等同於一個位元組。這意味著 PHP 只能支持 256 的字元集,因此不支持 Unicode 。 語法 一個字元串可以用 4 種方式表達: 單引號 雙引號 單引號 一個最簡單的字元串是用單引號包起來的。可以再前面加反斜杠(\)來轉義。例如 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...