2017-04-09 1 views
0

私は、異なるWebサイト(instantgaming、G2Aなど)のゲームの価格を自動的に比較するスクリプトを作成します。次のスクリプトは一部のサイトでは動作しますが、他のサイトでは動作しません。コードは次のようになります。WebScraping - BS4のみがタグを見つけます

import bs4 
import requests 
res1 = requests.get('https://www.g2a.com/?search=dead%20by%20daylight') 
res1.raise_for_status() 
soup = bs4.BeautifulSoup(res1.text,'html.parser') 
elems = soup.find('div', {'id': 'content-landing'}) 
children = elems.find('div', {'class': 'mp-product-info'}) 
price = children.find('strong', {'class': 'mp-pi-price-min'}) 
price.text.strip() 

問題は価格変数が正しいタグ

<strong class="mp-pi-price-min"></strong> 

が含まれていることである。しかし、それはブラウザによると、それは次のようになります(価格を格納していません:)

<strong class="mp-pi-price-min">10,16€</strong> 

CSS-Selectorで同じコードを実行すると、同じ結果が返されます。

答えて

0

ChromeデベロッパーツールやFirebugを開くと、そのページをリクエストすると、ゲームや価格を返すサービスXHRを呼び出すことがわかります。

あなたが望まないものをストライプし、jsonとして解析して結果を得る必要があります。

from bs4 import BeautifulSoup 
import requests 
import re 
import json 

response = requests.get('https://www.g2a.com/lucene/search/filter?jsoncallback=jQuery111002521088376353553_1491736907010&skip=28837%2C28838%2C28847%2C28849%2C28852%2C28856%2C28857%2C28858%2C28859%2C28860%2C28861%2C28862%2C28863%2C28867%2C28868%2C28869%2C29472%2C29473%2C29474%2C29475%2C29476%2C29482%2C29486%2C33104&minPrice=0.00&maxPrice=640.00&cn=&kr=&stock=all&event=&platform=0&search=dead+by+daylight&genre=0&cat=0&sortOrder=popularity+desc&start=0&rows=12&steam_app_id=&steam_category=&steam_prod_type=&includeOutOfStock=false&includeFreeGames=false&_=1491736907012') 
json_object = json.loads('{"data":%s}}' % (response.content.decode("utf-8").replace("jQuery111002521088376353553_1491736907010(", "")[:-2].replace("\'", ""))) 
for game in json_object["data"]["docs"]: 
    print ("Name: %s (Price: %s)" % (game["name"], game["minPrice"])) 

は、それが印刷されます::

名:デッド夏時間蒸気CD-KEY GLOBAL(価格:10.16)で

名ここ

は、その呼び出しの例です: Dead by Daylight STEAM CD-KEY LATAM(価格:5)

名前:Dead by Daylight - Flesh and Mud DLC STEAM CD-KEY GLOBAL(値段:4.99)

名:デッドデイライトデラックス版蒸気CD-KEY GLOBAL(価格:13.99)による

名:デッド夏時間スチームCD-KEY RU/CIS(価格:4.95)によって

名:によってデッドデイライト - 80年代スーツケースDLC蒸気CD-KEY GLOBAL(価格:2.99)

名:夏時間蒸気CD-KEY SEAによってデッド(価格:6)

はまた、あなたが変更する必要がありますことに気づきます&search=...部分検索するゲーム(urlencoded)と現在のunixタイムスタンプの部分には_=の部分が含まれています。

+0

うまく動作します、ありがとう! – Terrakx

関連する問題