如何使用 python 通过 bs4 抓取和访问 <script>
How to web scrape and access <script> wtih bs4 using python
我正在尝试从“https://www.deadstock.ca/products/adidas-futurepacer-grey-one”
抓取数据
我希望能够读取如下所示的变体数据:
<script>
window.ShopifyAnalytics = window.ShopifyAnalytics || {};
window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
window.ShopifyAnalytics.meta.currency = 'CAD';
var meta = {"product":{"id":223724142613,"vendor":"Adidas","type":"Footwear
- QS","variants":[{"id":3063231774741,"price":26000,"name":"adidas
Futurepacer \/ Grey One - 8","public_title":"8","sku":"AQ0907-Grey One-8"},
{"id":3063231807509,"price":26000,"name":"adidas Futurepacer \/ Grey One -
8.5","public_title":"8.5","sku":"AQ0907-Grey One-8.5"},
{"id":3063231840277,"price":26000,"name":"adidas Futurepacer \/ Grey One -
9","public_title":"9","sku":"AQ0907-Grey One-9"},
{"id":3063231873045,"price":26000,"name":"adidas Futurepacer \/ Grey One -
9.5","public_title":"9.5","sku":"AQ0907-Grey One-9.5"},
{"id":3063231905813,"price":26000,"name":"adidas Futurepacer \/ Grey One -
10","public_title":"10","sku":"AQ0907-Grey One-10"},
{"id":3063231938581,"price":26000,"name":"adidas Futurepacer \/ Grey One -
10.5","public_title":"10.5","sku":"AQ0907-Grey One-10.5"},
{"id":3063231971349,"price":26000,"name":"adidas Futurepacer \/ Grey One -
11","public_title":"11","sku":"AQ0907-Grey One-11"},
{"id":3063232004117,"price":26000,"name":"adidas Futurepacer \/ Grey One -
12","public_title":"12","sku":"AQ0907-Grey One-12"},
{"id":3063232036885,"price":26000,"name":"adidas Futurepacer \/ Grey One -
13","public_title":"13","sku":"AQ0907-Grey One-13"}]},"page":
{"pageType":"product","resourceType":"product","resourceId":223724142613}};
for (var attr in meta) {
window.ShopifyAnalytics.meta[attr] = meta[attr];
}
</script>
我认为我没有正确定位。我希望代码能够打印所有 "id": 数字。到目前为止,这是我的代码,我对 bs4 还是新手,但我们将不胜感激。谢谢
import bs4 as bs
import urllib.request
import lxml
link = urllib.request.urlopen ('https://www.deadstock.ca/products/adidas-futurepacer-grey-one').read()
soup = bs.BeautifulSoup(link,'lxml')
for variants in soup.find_all('script'):
print (variants)
我在@Andrej Kesely 回答的基础上尝试了类似的方法。
for id in data['variants']:
size = id['variants']['option1']
variantid = id['variants']['id']
print (size)
print (variantid)
不过它返回时出现了一个键盘错误,我只想让它显示所有 ID
对于此网站,您需要使用 id="ProductJson-product-template"
进行定位。它包含 JSON 所有变体:
import bs4 as bs
import urllib.request
import json
link = urllib.request.urlopen('https://www.deadstock.ca/products/adidas-futurepacer-grey-one').read()
soup = bs.BeautifulSoup(link,'lxml')
variant = soup.find('script', id='ProductJson-product-template')
data = json.loads(variant.text)
print(json.dumps(data, indent=4, sort_keys=True))
打印:
{
"available": true,
"compare_at_price": null,
"compare_at_price_max": 0,
"compare_at_price_min": 0,
"compare_at_price_varies": false,
"content": "<p>adidas digs into its vault to redesign the 1984 Micropacer, a computerized shoe that was designed to track running statistics. Today, the adidas Futurepacer takes cues from the Micropacer, and the more recent NMD collection, to deliver a futuristic lifestyle runner. Featuring a premium leather upper, complete with a modernized lace cover, the adidas Futurepacer sits on a Boost midsole for lightweight cushioning and responsiveness. NMD inspired bumpers are found at the heel and forefoot for added style and stability.</p>\n<ul>\n<li>Premium leather upper</li>\n<li>Premium leather lace cover</li>\n<li>Subtle adidas branding</li>\n<li>Boost midsole</li>\n<li>adidas midsole plugs</li>\n<li>Grey One</li>\n</ul>\n<p>Product Code: AQ0907</p>",
"created_at": "2018-03-05T14:23:57-08:00",
"description": "<p>adidas digs into its vault to redesign the 1984 Micropacer, a computerized shoe that was designed to track running statistics. Today, the adidas Futurepacer takes cues from the Micropacer, and the more recent NMD collection, to deliver a futuristic lifestyle runner. Featuring a premium leather upper, complete with a modernized lace cover, the adidas Futurepacer sits on a Boost midsole for lightweight cushioning and responsiveness. NMD inspired bumpers are found at the heel and forefoot for added style and stability.</p>\n<ul>\n<li>Premium leather upper</li>\n<li>Premium leather lace cover</li>\n<li>Subtle adidas branding</li>\n<li>Boost midsole</li>\n<li>adidas midsole plugs</li>\n<li>Grey One</li>\n</ul>\n<p>Product Code: AQ0907</p>",
"featured_image": "//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one.jpg?v=1530313621",
"handle": "adidas-futurepacer-grey-one",
"id": 223724142613,
"images": [
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one.jpg?v=1530313621",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_1.jpg?v=1531247436",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_2.jpg?v=1531247441",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_3.jpg?v=1531247444",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_4.jpg?v=1531247447",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_5.jpg?v=1531247449"
],
"options": [
"US Size"
],
"price": 26000,
"price_max": 26000,
"price_min": 26000,
"price_varies": false,
"published_at": "2018-07-14T12:00:00-07:00",
"tags": [
"07142018",
"cf-type-footwear-qs",
"cf-us-size-10",
"cf-us-size-10-5",
"cf-us-size-11",
"cf-us-size-12",
"cf-us-size-13",
"cf-us-size-8",
"cf-us-size-8-5",
"cf-us-size-9",
"cf-us-size-9-5",
"cf-vendor-adidas",
"free_shipping",
"limit-quantity",
"plsmerch"
],
"title": "adidas Futurepacer / Grey One",
"type": "Footwear - QS",
"variants": [
{
"available": true,
"barcode": "193050061142",
"compare_at_price": null,
"featured_image": null,
"id": 3063231774741,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 3,
"name": "adidas Futurepacer / Grey One - 8",
"option1": "8",
"option2": null,
"option3": null,
"options": [
"8"
],
"price": 26000,
"public_title": "8",
"requires_shipping": true,
"sku": "AQ0907-Grey One-8",
"taxable": true,
"title": "8",
"weight": 0
},
{
"available": true,
"barcode": "193050061159",
"compare_at_price": null,
"featured_image": null,
"id": 3063231807509,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 2,
"name": "adidas Futurepacer / Grey One - 8.5",
"option1": "8.5",
"option2": null,
"option3": null,
"options": [
"8.5"
],
"price": 26000,
"public_title": "8.5",
"requires_shipping": true,
"sku": "AQ0907-Grey One-8.5",
"taxable": true,
"title": "8.5",
"weight": 0
},
{
"available": true,
"barcode": "193050061166",
"compare_at_price": null,
"featured_image": null,
"id": 3063231840277,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 6,
"name": "adidas Futurepacer / Grey One - 9",
"option1": "9",
"option2": null,
"option3": null,
"options": [
"9"
],
"price": 26000,
"public_title": "9",
"requires_shipping": true,
"sku": "AQ0907-Grey One-9",
"taxable": true,
"title": "9",
"weight": 0
},
{
"available": true,
"barcode": "193050061173",
"compare_at_price": null,
"featured_image": null,
"id": 3063231873045,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 5,
"name": "adidas Futurepacer / Grey One - 9.5",
"option1": "9.5",
"option2": null,
"option3": null,
"options": [
"9.5"
],
"price": 26000,
"public_title": "9.5",
"requires_shipping": true,
"sku": "AQ0907-Grey One-9.5",
"taxable": true,
"title": "9.5",
"weight": 0
},
{
"available": true,
"barcode": "193050061180",
"compare_at_price": null,
"featured_image": null,
"id": 3063231905813,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 6,
"name": "adidas Futurepacer / Grey One - 10",
"option1": "10",
"option2": null,
"option3": null,
"options": [
"10"
],
"price": 26000,
"public_title": "10",
"requires_shipping": true,
"sku": "AQ0907-Grey One-10",
"taxable": true,
"title": "10",
"weight": 0
},
{
"available": true,
"barcode": "193050061197",
"compare_at_price": null,
"featured_image": null,
"id": 3063231938581,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 6,
"name": "adidas Futurepacer / Grey One - 10.5",
"option1": "10.5",
"option2": null,
"option3": null,
"options": [
"10.5"
],
"price": 26000,
"public_title": "10.5",
"requires_shipping": true,
"sku": "AQ0907-Grey One-10.5",
"taxable": true,
"title": "10.5",
"weight": 0
},
{
"available": true,
"barcode": "193050061203",
"compare_at_price": null,
"featured_image": null,
"id": 3063231971349,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 1,
"name": "adidas Futurepacer / Grey One - 11",
"option1": "11",
"option2": null,
"option3": null,
"options": [
"11"
],
"price": 26000,
"public_title": "11",
"requires_shipping": true,
"sku": "AQ0907-Grey One-11",
"taxable": true,
"title": "11",
"weight": 0
},
{
"available": true,
"barcode": "193050061210",
"compare_at_price": null,
"featured_image": null,
"id": 3063232004117,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 4,
"name": "adidas Futurepacer / Grey One - 12",
"option1": "12",
"option2": null,
"option3": null,
"options": [
"12"
],
"price": 26000,
"public_title": "12",
"requires_shipping": true,
"sku": "AQ0907-Grey One-12",
"taxable": true,
"title": "12",
"weight": 0
},
{
"available": true,
"barcode": "193050061227",
"compare_at_price": null,
"featured_image": null,
"id": 3063232036885,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 1,
"name": "adidas Futurepacer / Grey One - 13",
"option1": "13",
"option2": null,
"option3": null,
"options": [
"13"
],
"price": 26000,
"public_title": "13",
"requires_shipping": true,
"sku": "AQ0907-Grey One-13",
"taxable": true,
"title": "13",
"weight": 0
}
],
"vendor": "Adidas"
}
我正在尝试从“https://www.deadstock.ca/products/adidas-futurepacer-grey-one”
抓取数据我希望能够读取如下所示的变体数据:
<script>
window.ShopifyAnalytics = window.ShopifyAnalytics || {};
window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {};
window.ShopifyAnalytics.meta.currency = 'CAD';
var meta = {"product":{"id":223724142613,"vendor":"Adidas","type":"Footwear
- QS","variants":[{"id":3063231774741,"price":26000,"name":"adidas
Futurepacer \/ Grey One - 8","public_title":"8","sku":"AQ0907-Grey One-8"},
{"id":3063231807509,"price":26000,"name":"adidas Futurepacer \/ Grey One -
8.5","public_title":"8.5","sku":"AQ0907-Grey One-8.5"},
{"id":3063231840277,"price":26000,"name":"adidas Futurepacer \/ Grey One -
9","public_title":"9","sku":"AQ0907-Grey One-9"},
{"id":3063231873045,"price":26000,"name":"adidas Futurepacer \/ Grey One -
9.5","public_title":"9.5","sku":"AQ0907-Grey One-9.5"},
{"id":3063231905813,"price":26000,"name":"adidas Futurepacer \/ Grey One -
10","public_title":"10","sku":"AQ0907-Grey One-10"},
{"id":3063231938581,"price":26000,"name":"adidas Futurepacer \/ Grey One -
10.5","public_title":"10.5","sku":"AQ0907-Grey One-10.5"},
{"id":3063231971349,"price":26000,"name":"adidas Futurepacer \/ Grey One -
11","public_title":"11","sku":"AQ0907-Grey One-11"},
{"id":3063232004117,"price":26000,"name":"adidas Futurepacer \/ Grey One -
12","public_title":"12","sku":"AQ0907-Grey One-12"},
{"id":3063232036885,"price":26000,"name":"adidas Futurepacer \/ Grey One -
13","public_title":"13","sku":"AQ0907-Grey One-13"}]},"page":
{"pageType":"product","resourceType":"product","resourceId":223724142613}};
for (var attr in meta) {
window.ShopifyAnalytics.meta[attr] = meta[attr];
}
</script>
我认为我没有正确定位。我希望代码能够打印所有 "id": 数字。到目前为止,这是我的代码,我对 bs4 还是新手,但我们将不胜感激。谢谢
import bs4 as bs
import urllib.request
import lxml
link = urllib.request.urlopen ('https://www.deadstock.ca/products/adidas-futurepacer-grey-one').read()
soup = bs.BeautifulSoup(link,'lxml')
for variants in soup.find_all('script'):
print (variants)
我在@Andrej Kesely 回答的基础上尝试了类似的方法。
for id in data['variants']:
size = id['variants']['option1']
variantid = id['variants']['id']
print (size)
print (variantid)
不过它返回时出现了一个键盘错误,我只想让它显示所有 ID
对于此网站,您需要使用 id="ProductJson-product-template"
进行定位。它包含 JSON 所有变体:
import bs4 as bs
import urllib.request
import json
link = urllib.request.urlopen('https://www.deadstock.ca/products/adidas-futurepacer-grey-one').read()
soup = bs.BeautifulSoup(link,'lxml')
variant = soup.find('script', id='ProductJson-product-template')
data = json.loads(variant.text)
print(json.dumps(data, indent=4, sort_keys=True))
打印:
{
"available": true,
"compare_at_price": null,
"compare_at_price_max": 0,
"compare_at_price_min": 0,
"compare_at_price_varies": false,
"content": "<p>adidas digs into its vault to redesign the 1984 Micropacer, a computerized shoe that was designed to track running statistics. Today, the adidas Futurepacer takes cues from the Micropacer, and the more recent NMD collection, to deliver a futuristic lifestyle runner. Featuring a premium leather upper, complete with a modernized lace cover, the adidas Futurepacer sits on a Boost midsole for lightweight cushioning and responsiveness. NMD inspired bumpers are found at the heel and forefoot for added style and stability.</p>\n<ul>\n<li>Premium leather upper</li>\n<li>Premium leather lace cover</li>\n<li>Subtle adidas branding</li>\n<li>Boost midsole</li>\n<li>adidas midsole plugs</li>\n<li>Grey One</li>\n</ul>\n<p>Product Code: AQ0907</p>",
"created_at": "2018-03-05T14:23:57-08:00",
"description": "<p>adidas digs into its vault to redesign the 1984 Micropacer, a computerized shoe that was designed to track running statistics. Today, the adidas Futurepacer takes cues from the Micropacer, and the more recent NMD collection, to deliver a futuristic lifestyle runner. Featuring a premium leather upper, complete with a modernized lace cover, the adidas Futurepacer sits on a Boost midsole for lightweight cushioning and responsiveness. NMD inspired bumpers are found at the heel and forefoot for added style and stability.</p>\n<ul>\n<li>Premium leather upper</li>\n<li>Premium leather lace cover</li>\n<li>Subtle adidas branding</li>\n<li>Boost midsole</li>\n<li>adidas midsole plugs</li>\n<li>Grey One</li>\n</ul>\n<p>Product Code: AQ0907</p>",
"featured_image": "//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one.jpg?v=1530313621",
"handle": "adidas-futurepacer-grey-one",
"id": 223724142613,
"images": [
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one.jpg?v=1530313621",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_1.jpg?v=1531247436",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_2.jpg?v=1531247441",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_3.jpg?v=1531247444",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_4.jpg?v=1531247447",
"//cdn.shopify.com/s/files/1/0616/3517/products/aq0907_adidas_futurepacer_grey_one_5.jpg?v=1531247449"
],
"options": [
"US Size"
],
"price": 26000,
"price_max": 26000,
"price_min": 26000,
"price_varies": false,
"published_at": "2018-07-14T12:00:00-07:00",
"tags": [
"07142018",
"cf-type-footwear-qs",
"cf-us-size-10",
"cf-us-size-10-5",
"cf-us-size-11",
"cf-us-size-12",
"cf-us-size-13",
"cf-us-size-8",
"cf-us-size-8-5",
"cf-us-size-9",
"cf-us-size-9-5",
"cf-vendor-adidas",
"free_shipping",
"limit-quantity",
"plsmerch"
],
"title": "adidas Futurepacer / Grey One",
"type": "Footwear - QS",
"variants": [
{
"available": true,
"barcode": "193050061142",
"compare_at_price": null,
"featured_image": null,
"id": 3063231774741,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 3,
"name": "adidas Futurepacer / Grey One - 8",
"option1": "8",
"option2": null,
"option3": null,
"options": [
"8"
],
"price": 26000,
"public_title": "8",
"requires_shipping": true,
"sku": "AQ0907-Grey One-8",
"taxable": true,
"title": "8",
"weight": 0
},
{
"available": true,
"barcode": "193050061159",
"compare_at_price": null,
"featured_image": null,
"id": 3063231807509,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 2,
"name": "adidas Futurepacer / Grey One - 8.5",
"option1": "8.5",
"option2": null,
"option3": null,
"options": [
"8.5"
],
"price": 26000,
"public_title": "8.5",
"requires_shipping": true,
"sku": "AQ0907-Grey One-8.5",
"taxable": true,
"title": "8.5",
"weight": 0
},
{
"available": true,
"barcode": "193050061166",
"compare_at_price": null,
"featured_image": null,
"id": 3063231840277,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 6,
"name": "adidas Futurepacer / Grey One - 9",
"option1": "9",
"option2": null,
"option3": null,
"options": [
"9"
],
"price": 26000,
"public_title": "9",
"requires_shipping": true,
"sku": "AQ0907-Grey One-9",
"taxable": true,
"title": "9",
"weight": 0
},
{
"available": true,
"barcode": "193050061173",
"compare_at_price": null,
"featured_image": null,
"id": 3063231873045,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 5,
"name": "adidas Futurepacer / Grey One - 9.5",
"option1": "9.5",
"option2": null,
"option3": null,
"options": [
"9.5"
],
"price": 26000,
"public_title": "9.5",
"requires_shipping": true,
"sku": "AQ0907-Grey One-9.5",
"taxable": true,
"title": "9.5",
"weight": 0
},
{
"available": true,
"barcode": "193050061180",
"compare_at_price": null,
"featured_image": null,
"id": 3063231905813,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 6,
"name": "adidas Futurepacer / Grey One - 10",
"option1": "10",
"option2": null,
"option3": null,
"options": [
"10"
],
"price": 26000,
"public_title": "10",
"requires_shipping": true,
"sku": "AQ0907-Grey One-10",
"taxable": true,
"title": "10",
"weight": 0
},
{
"available": true,
"barcode": "193050061197",
"compare_at_price": null,
"featured_image": null,
"id": 3063231938581,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 6,
"name": "adidas Futurepacer / Grey One - 10.5",
"option1": "10.5",
"option2": null,
"option3": null,
"options": [
"10.5"
],
"price": 26000,
"public_title": "10.5",
"requires_shipping": true,
"sku": "AQ0907-Grey One-10.5",
"taxable": true,
"title": "10.5",
"weight": 0
},
{
"available": true,
"barcode": "193050061203",
"compare_at_price": null,
"featured_image": null,
"id": 3063231971349,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 1,
"name": "adidas Futurepacer / Grey One - 11",
"option1": "11",
"option2": null,
"option3": null,
"options": [
"11"
],
"price": 26000,
"public_title": "11",
"requires_shipping": true,
"sku": "AQ0907-Grey One-11",
"taxable": true,
"title": "11",
"weight": 0
},
{
"available": true,
"barcode": "193050061210",
"compare_at_price": null,
"featured_image": null,
"id": 3063232004117,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 4,
"name": "adidas Futurepacer / Grey One - 12",
"option1": "12",
"option2": null,
"option3": null,
"options": [
"12"
],
"price": 26000,
"public_title": "12",
"requires_shipping": true,
"sku": "AQ0907-Grey One-12",
"taxable": true,
"title": "12",
"weight": 0
},
{
"available": true,
"barcode": "193050061227",
"compare_at_price": null,
"featured_image": null,
"id": 3063232036885,
"inventory_management": "shopify",
"inventory_policy": "deny",
"inventory_quantity": 1,
"name": "adidas Futurepacer / Grey One - 13",
"option1": "13",
"option2": null,
"option3": null,
"options": [
"13"
],
"price": 26000,
"public_title": "13",
"requires_shipping": true,
"sku": "AQ0907-Grey One-13",
"taxable": true,
"title": "13",
"weight": 0
}
],
"vendor": "Adidas"
}