【发布时间】:2017-01-30 17:28:45
【问题描述】:
我正在尝试从BGG 中抓取排名数据。
HTML的基本结构如下:
<table class = "collection_table">
<tbody>
<tr></tr>
<tr id="row_"></tr>
<tr id="row_"></tr>
<tr id="row_"></tr>
<tr id="row_"></tr>
<!--snip-->
<tr id="row_"></tr>
<tr id="row_"></tr>
<tr id="row_"></tr>
</tbody>
</table>
请注意,除了第一行(标题)之外的每一行都具有相同的 id,并且没有额外的数据将其标记为唯一行。
我的(当前)代码如下:
def bgg_scrape_rank_page(browser, bgg_data):
time.sleep(1)
table = browser.find_element_by_xpath("//table[@class='collection_table']/tbody")
row = table.find_element_by_xpath("//tr[@id='row_']")
while row:
rank = row.find_element_by_xpath("//td[1]").text
game_name = row.find_element_by_xpath("//td[3]/div[2]/a").text
game_page = row.find_element_by_xpath("//td[3]/div[2]/a").get_attribute("href")
print rank, game_name, game_page
row = row.find_element_by_xpath("//following-sibling::tr")
我也尝试过使用迭代
rows = browser.find_elements_by_xpath("/tr[@id='row_']")
for row in rows:
rank = row.find_element_by_xpath("//td[1]").text
game_name = row.find_element_by_xpath("//td[3]/div[2]/a").text
game_page = row.find_element_by_xpath("//td[3]/div[2]/a").get_attribute("href")
print rank, game_name, game_page
问题是,无论我尝试什么,我总是只打印出第一行。只是一行一行的
1 "Pandemic Legacy: Season 1 https://boardgamegeek.com/boardgame/161936/pandemic-legacy-season-1".
【问题讨论】: