7.1 momo購物網爬蟲

這邊是去爬momo購物網的行動版網頁, 要注意的地方是你必須附上User-Agent才可以.

import urllib.parse
import requests
import time
import json
import os
from bs4 import BeautifulSoup


STORE = 'momo'
MOMO_MOBILE_URL = 'http://m.momoshop.com.tw/'
MOMO_QUERY_URL = MOMO_MOBILE_URL + 'mosearch/%s.html'
USER_AGENT_VALUE = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'


def get_web_content(query):
    encoded_query = urllib.parse.quote(query)
    query_url = MOMO_QUERY_URL % encoded_query
    headers = {'User-Agent': USER_AGENT_VALUE}
    resp = requests.get(query_url, headers=headers)
    if not resp:
        return []
    resp.encoding = 'UTF-8'
    return BeautifulSoup(resp.text, 'html.parser')


def search_momo(query):
    dom = get_web_content(query)
    if dom:
        items = []
        for element in dom.find(id='itemizedStyle').ul.find_all('li'):
            item_name = element.find('p', 'prdName').text
            item_price = element.find('b', 'price').text.replace(',', '')
            if not item_price:
                continue
            item_price = int(item_price)
            item_url = MOMO_MOBILE_URL + element.find('a')['href']
            item_img_url = element.a.img['src']

            item = {
                'name': item_name,
                'price': item_price,
                'url': item_url,
                'img_url': item_img_url
            }

            items.append(item)
        return items


def save_search_result(data):
    with open(os.path.join('json', data['date'] + '-%s.json' % STORE), 'w', encoding='UTF-8') as file:
        json.dump(data, file, indent=2, ensure_ascii=False)


def main():
    query_str = 'iPhone 7 Plus 128G'
    items = search_momo(query_str)
    today = time.strftime('%m-%d')
    print('Search item \'%s\' from %s...' % (query_str, STORE))
    print('Search %d records on %s' % (len(items), today))
    for item in items:
        print(item)
    data = {
        'date': today,
        'store': STORE,
        'items': items
    }

    save_search_result(data)


if __name__ == '__main__':
    main()

輸出結果:

Search item 'iPhone 7 Plus 128G' from momo...
Search 20 records on 05-27
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機', 'price': 32900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4315776&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple拆封新品】iPhone 7 Plus 5.5吋128G智慧型手機(4G)', 'price': 28200, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4363143&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple福利品】iPhone 7 Plus 5.5吋128G智慧型手機(4G)', 'price': 27000, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4347131&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【APPLE 福利品】IPHONE 7 PLUS 智慧型手機(128G 加贈 WUW氣墊空壓殼+9H鋼化玻璃保貼)', 'price': 28690, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4442207&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋 智慧型手機(贈超值好禮)', 'price': 32500, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4302855&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機(紅色/送2個犀牛盾防摔殼+玻璃保貼)', 'price': 32700, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4662748&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple福利品】iPhone 7 Plus 5.5吋 128G智慧型手機', 'price': 29000, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4723290&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【APPLE 福利品】IPHONE 7 PLUS 智慧型手機(128G 加贈 WUW氣墊空壓殼+9H鋼化玻璃保貼)', 'price': 28690, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4538668&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 PLUS RED 128G 5.5吋智慧型手機(紅色特別版)', 'price': 32900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4666065&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus  128G 5.5吋 智慧型手機(贈:五大好禮)', 'price': 32900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4296440&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus  128G 5.5吋 智慧型手機(藍芽運動組)', 'price': 32900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4670461&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【APPLE】iPhone 7 PLUS RED 128G 5.5吋智慧型手機(紅色特別版)保護殼+保護貼組', 'price': 33400, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4672560&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機', 'price': 32900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4789267&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋 紅色版 智慧型手機(送超值好禮)', 'price': 31900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4673656&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機(SNOOPY行電+殼+貼組)', 'price': 33900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4497865&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機(拉拉熊行電+殼+貼組)', 'price': 33900, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4585561&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機(超值殼貼組)', 'price': 33400, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4668853&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【APPLE】iPhone 7 PLUS RED 128G 5.5吋智慧型手機(紅色特別版)(送Office 365)', 'price': 34300, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4766345&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus 128G 5.5吋智慧型手機(送Office 365)', 'price': 34300, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4766328&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}
{'name': '【Apple】iPhone 7 Plus  128G 5.5吋 智慧型手機(小米運動組)', 'price': 32300, 'url': 'http://m.momoshop.com.tw//goods.momo?i_code=4538205&mdiv=searchEngine', 'img_url': '/ecm/img/cmm/blank.png'}

Process finished with exit code 0

原始碼點我

Last updated