<p>在您选择的浏览器中打开<a href="https://www.mcdonalds.com.sg/locate-us/" rel="noreferrer">https://www.mcdonalds.com.sg/locate-us/</a>时,打开“检查”工具(希望它有一个,例如Chrome或Firefox),并查找“网络”选项卡。</p>
<p>您可以进一步筛选“XHR”(XMLHttpRequest)事件,您将看到一个使用此主体的<code>POST</code>请求<code>https://www.mcdonalds.com.sg/wp-admin/admin-ajax.php</code></p>
<pre><code>action=ws_search_store_location&store_name=0&store_area=0&store_type=0
</code></pre>
<p>对POST请求的响应是一个JSON对象,包含您想要的所有信息</p>
<pre><code>import json
import pprint
...
class MySpider(BaseSpider):
...
def parse_json(self, response):
js = json.loads(response.body)
pprint.pprint(js)
</code></pre>
<p>这将输出如下内容:</p>
<pre><code>{u'flagicon': u'https://www.mcdonalds.com.sg/wp-content/themes/mcd/images/storeflag.png',
u'stores': {u'listing': [{u'address': u'678A Woodlands Avenue 6<br/>#01-05<br/>Singapore 731678',
u'city': u'Singapore',
u'id': 78,
u'lat': u'1.440409',
u'lon': u'103.801489',
u'name': u"McDonald's Admiralty",
u'op_hours': u'24 hours<br>\r\nDessert Kiosk: 0900-0100',
u'phone': u'68940513',
u'region': u'north',
u'type': [u'24hrs', u'dessert_kiosk'],
u'zip': u'731678'},
{u'address': u'383 Bukit Timah Road<br/>#01-09B<br/>Alocassia Apartments<br/>Singapore 259727',
u'city': u'Singapore',
u'id': 97,
u'lat': u'1.319752',
u'lon': u'103.827398',
u'name': u"McDonald's Alocassia",
u'op_hours': u'Daily: 0630-0100',
u'phone': u'68874961',
u'region': u'central',
u'type': [u'24hrs_weekend',
u'drive_thru',
u'mccafe'],
u'zip': u'259727'},
...
{u'address': u'60 Yishuan Avenue 4 <br/>#01-11<br/><br/>Singapore 769027',
u'city': u'Singapore',
u'id': 1036,
u'lat': u'1.423924',
u'lon': u'103.840628',
u'name': u"McDonald's Yishun Safra",
u'op_hours': u'24 hours',
u'phone': u'67585632',
u'region': u'north',
u'type': [u'24hrs',
u'drive_thru',
u'live_screening',
u'mccafe',
u'bday_party'],
u'zip': u'769027'}],
u'region': u'all'}}
</code></pre>
<p>我让你去提取你想要的田地。</p>
<p>在用Scrapy发送的FormRequest()中,您可能需要添加一个“X-Requested-with:XMLHttpRequest”头(如果您在inspect工具中查看请求头,浏览器将发送该头)</p>