📘
Python web crawler note
  • Introduction
  • 1. 環境安裝與爬蟲的基本
  • 1.1 環境安裝
  • 1.2 IDE設定
  • 1.3 一隻很原始的爬蟲
  • 1.4 幫爬蟲裝煞車
  • 2. 用BeautifuSoup來分析網頁
  • 2.1 BeautifulSoup範例 - 1
  • 2.2 BeautifulSoup說明
  • 2.3 BeautifulSoup範例 - 2
  • 2.4 加入Regular Expression
  • 2.5 Dcard今日十大熱門文章
  • 3. 更多實際的應用
  • 3.1 PTT八卦版今日熱門文章
  • 3.2 Yahoo奇摩電影本週新片
  • 3.3 蘋果日報/自由時報今日焦點
  • 3.4 Google Finance 個股資訊
  • 3.5 Yahoo奇摩字典
  • 4. 基於API的爬蟲
  • 4.1 八卦版鄉民從哪來?
  • 4.2 Facebook Graph API
  • 4.3 imdb電影資訊查詢
  • 4.4 Google Finance API
  • 4.5 台灣證券交易所API
  • 5. 資料儲存
  • 5.1 痴漢爬蟲(PTT表特版下載器)
  • 5.2 儲存成CSV檔案
  • 5.3 儲存至SQLite
  • 6. 不同編碼/文件類型的爬蟲
  • 6.1 非UTF-8編碼的文件
  • 6.2 XML文件
  • 7. 比價爬蟲
  • 7.1 momo購物網爬蟲
  • 7.2 PChome 24h API爬蟲
  • 7.3 比價圖表程式
  • 8. 處理POST請求/登入頁面
  • 8.1 空氣品質監測網
  • 9. 動態網頁爬蟲
  • 9.1 台銀法拍屋資訊查詢
  • 10. 自然語言處理
  • 10.1 歌詞頻率與歌詞雲
Powered by GitBook
On this page

Was this helpful?

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
Previous7. 比價爬蟲Next7.2 PChome 24h API爬蟲

Last updated 5 years ago

Was this helpful?

原始碼

點我