2016-10-26 14 views
2

「a」カテゴリの下のWebサイトからゲームのリストを検索しようとしています。値 "letter-a"のid属性を持つdivが見つかりましたが、どのパターンを試しても、li要素は直接含まれていません。BeautifulSoup:要素内の要素を見つける

import bs4 
import logging 
import requests 

logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - \ 
%(levelname)s - %(message)s") 

##res = requests.get("http://www.xbox.com/en-GB/xbox-one/backward-\ 
##compatibility") 
res = requests.get("http://www.xbox.com/en-US/xbox-one/backward-\ 
compatibility/available-games") 
res.raise_for_status() 

soup = bs4.BeautifulSoup(res.text, "html.parser") 
#game_elems = soup.select("body[id=\"DocumentBody\"] div[id=\"bodycolumn\"]") 
game_elems = soup.select("#letter-a li") 

logging.info("Length added elements: {}".format(len(game_elems))) 
if game_elems: 
    logging.info("First element in 'game_elems': {}".format(str(game_elems[0]))) 

enter image description here

+0

どのパターンを試しましたか?あなたがターゲットにしようとしているHTMLの外観はどうですか? – Lost

+0

たくさん:) htmlのimgを追加しました。 –

+0

あなたは何がうまくいかないか、あなたが得ているアウトプットとあなたが望むアウトプットが何であるかを忘れてしまいました。 – MooingRawr

答えて

3

あなたはセレンブラウザを制御することによって、JSによって変更DOMをこすりすることができます。セレンでそれを行うには、あなたはそれが好きですか可能性:

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

driver = webdriver.Firefox() 
driver.get("http://www.xbox.com/en-US/xbox-one/backward-compatibility/available-games") 

elem = driver.find_element_by_css_selector("#letter-a") 
print elem.get_attribute('innerHTML') 
driver.close() 

をまたPhantomJSのようなヘッドレスブラウザ(ウィンドウを開かずに、バックグラウンドで実行ブラウザ)を含むセレンと他のブラウザを制御することができます。


は以前、私はHTMLが不正であることに気づいていた - あなたは ul内に直接 divを持つべきではありません。しかし、それは最後にブロッキングの問題ではありませんでした。

+0

ありがとうございます。私は他のパーサの使い方を調べます。 –

+0

答えにいくつかの例を追加しました。 –

+0

非常に高く評価されたイワン!どうもありがとう。 –

関連する問題