我是Python新手并尝试开发一个简单的Web scraper。我在HTML中抓取脚本标记时遇到问题。这是我的代码:



 来自urllib.request import request,urlopen
来自bs4 import BeautifulSoup
 import re

 link =“https://yeezysupply.com/products/womens-mule-pvc-clear"
def get_variants():
 url1 =请求(link,headers = {'User-Agent':'Mozilla / 5.0(Macintosh; Intel Mac OS X 10_12_2)AppleWebKit / 537.36'
'(KHTML,如Gecko)Chrome / 56.0.2924.28 Safari / 537.36' })
 url2 = urlopen(url1)
汤= BeautifulSoup(url2,'html.parser')
 variants = soup.find(string = re.compile(r'\ bid \ s *:\ s(\ d {11}),\ s * parent_id'))
 print(variants)

 if __name__ =='__ main __':
 get_variants()



 代码当前返回:


 KANYE .p.variants.push({
 id:38844706759,
 parent_id:9876888199,
可用:true,
 featured_image:null,
 public_title:null,&# xA; requires_shipping:true,
 price:62500,
 options:[“35”],
 option1:“35”,
 option2:“”,
 option3 :“”,
 option4:“”
});

 KANYE.p.variants.push({
 id:38844706887,
 parent_id: 9876888199,
可用:true,
 featured_image:“\ / \ / cdn.shopify.com \ / s \ / files \ / 1 \ / 1765 \ / 5971 \ / products \ /KW3029.001_Side1_650xx。 jpg?v = 1488326253“,
 public_title:null,
 requires_shipping:true,
 price:62500,
 options:[”35.5“],
 option1:” 35.5“,
选项2:”“,
选项3 :“”,
 option4:“”
});

 KANYE.p.variants.push({
 id:38844706951,
 parent_id:9876888199,
可用: true,
 featured_image:null,
 public_title:null,
 requires_shipping:true,
 price:62500,
 options:[“36”],
 option1:“36”,
 option2:“”,
 option3:“”,
 option4:“”
});
 ...



 我试图只抓“id”及其价值。所以我需要scrape id:38844706759,id:38844706887,id:38844706951。这怎么可能?我已经在这一段时间了,我仍然感到困惑。

答案 0 :(得分:1)
BeautifulSoup无法解析脚本标记。只查找与您的查询匹配的文本(因为它们是顶级元素的一部分。)。
在您variants = soup.find(string=re.compile(r'\bid\s*:\s(\d{11}),\s*parent_id'))
后,您可以执行正则表达式查找ID标记。
variants = soup.find_all(string=re.compile(r'\bid\s*:\s(\d{11}),\s*parent_id'))
for variant in variants:
print (re.findall(r'id\s+:.(.*?),', variant, re.MULTILINE))
哪个输出
[u'9876888199', u'38844706759', u'9876888199'...]