2017-04-24 4 views
-1

私はPythonには新しく、単純なWebスクレーパーを開発しようとしています。私は、HTML内でスクリプトタグを掻き集めることに問題があります。ここに私のコードは次のとおりです。<script>タグをBS4で削る

from urllib.request import Request, urlopen 
from bs4 import BeautifulSoup 
import re 

link = "https://yeezysupply.com/products/womens-mule-pvc-clear" 

def get_variants(): 
    url1 = Request(link, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36' 
       '(KHTML, like Gecko) Chrome/56.0.2924.28 Safari/537.36'}) 
    url2 = urlopen(url1) 
    soup = 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, 
    available   : true, 
    featured_image : null, 
    public_title  : null, 
    requires_shipping : true, 
    price    : 62500, 
    options   : ["35"], 
    option1   : "35", 
    option2   : "", 
    option3   : "", 
    option4   : "" 
}); 

KANYE.p.variants.push({ 
    id    : 38844706887, 
    parent_id   : 9876888199, 
    available   : 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", 
    option2   : "", 
    option3   : "", 
    option4   : "" 
}); 

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

を私は「ID」と、その値をこすりしようとしています。だから私はid:38844706759、id:38844706887、id:38844706951をこすり落とす必要があります。これはどのように可能ですか?私はかなり長い間これをしてきましたが、私はまだ混乱しています。

答えて

1

BeautifulSoupはスクリプトタグを解析できません。それらの内部のクエリに一致するテキストのみを検索します(これらはトップレベル要素の一部です)。

variants = soup.find(string=re.compile(r'\bid\s*:\s(\d{11}),\s*parent_id'))の後に、正規表現のfindallを使ってIDタグを見つけることができます。

[u'9876888199', u'38844706759', u'9876888199'...] 
+0

ああを出力

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)) 

私は、あなたの回答に感謝を参照してください。私はそのコードを実装しようとしましたが、それはidのものではなく、無数の回を返しました。どこが間違っていますか? – BrianHunt

+0

@BrianHuntは私の投稿を更新したコードであなたの亜種を更新します。 – Zroq

+0

ありがとう、それは完全に働いた。 parent_idではなく、idだけを出力する方法はありますか? – BrianHunt

関連する問題