jquery 努力刮潘多拉珠宝店?

ar5n3qh5  于 2023-10-17  发布在  jQuery
关注(0)|答案(1)|浏览(81)

我试图刮https://stores.pandora.net/en-au/的所有地点在澳大利亚和他们的地址使用Parsehub和它不抛出结果,因为它通常会。
Parse Hub截图:

如图所示,现场预览显示表完美的罚款,但当我运行它只抛出垃圾值(如2商店在美国)
我试着用Beautiful soup,但是类看起来比我最初想象的要复杂。(看起来它是坐在MapList数组,但我不知道我如何提取这一位)
任何帮助在这里将不胜感激!谢谢您的支持:)

twh00eeo

twh00eeo1#

这个站点从这个API https://maps.pandora.net/api/getAsyncLocations获取数据,查询参数中有search值。结果是一个JSON对象,其字段maplist包含html数据(单个div)。这个div嵌入了几个逗号分隔的JSON对象:

curl 'https://maps.pandora.net/api/getAsyncLocations?level=domain&template=domain&search=Melbourne+Victoria%2C+Australie'

因此,我们需要将逗号分隔的JSON对象重新排列到一个数组中来解析它。以下示例使用curljq(json解析器)、sedpup(html解析器)提取数据:

search="Melbourne+Victoria+Australie"
curl -s -G 'https://maps.pandora.net/api/getAsyncLocations' \
    -d 'level=domain' \
    -d 'template=domain' \
    -d "search=$search" | \
    jq -r '.maplist' | \
    pup -p div text{} | \
    sed '$ s/.$//' | \
    sed -e "\$a]" | \
    sed '1s/^/[/' | \
    jq '.[] | { 
        location: .location_name, 
        address: .address_1, 
        complement: (.city + "," + .big_region + " " + .location_post_code) 
    }'

pythonpython-requestsbeautifulsoup中:

import requests
from bs4 import BeautifulSoup
import json

search = "Melbourne+Victoria+Australie"

response = requests.get(
    'https://maps.pandora.net/api/getAsyncLocations',
    params = {
        'level':'domain',
        'template':'domain',
        'search': search
    }
)
soup = BeautifulSoup(response.json()['maplist'], 'html.parser')

formatted_json = "[{}]".format(soup.div.string[:-1])
data = json.loads(formatted_json)

print([
    (i['location_name'], i['address_1'], i['city'], i['big_region'], i['location_post_code']) 
    for i in data
])

相关问题