# 7.1 momo購物網爬蟲

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

```python
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()
```

輸出結果:

```javascript
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
```

原始碼[點我](https://github.com/yotsuba1022/web-crawler-practice/blob/master/ch7/momo_crawler.py)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://clu.gitbook.io/python-web-crawler-note/71-momogou-wu-wang-pa-chong.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
