BeautifulSoup 循环访问 url
BeautifulSoup looping through urls
我正在尝试收获一些国际象棋游戏,并在一些帮助下完成了基础知识 here.The 主要功能看起来像:
import requests
import urllib2
from bs4 import BeautifulSoup
r = requests.get(userurl)
soup = BeautifulSoup(r.content)
gameids= []
for link in soup.select('a[href^=/livechess/game?id=]'):
gameid = link['href'].split("?id=")[1]
gameids.append(int(gameid))
return gameids
基本上发生的事情是我为特定用户(例如 http://www.chess.com/home/game_archive?sortby=&show=live&member=Hikaru,grab 和 html 转到 url 并抓取 gameids.This 对于一页来说效果很好。
然而,一些用户玩了很多游戏,由于每页只显示 50 个游戏,他们的游戏被列在多个 pages.e.g
http://www.chess.com/home/game_archive?sortby=&show=live&member=Hikaru&page=2(或 3/4/5 等)
那就是我所在的位置 stuck.How 我可以遍历页面并获取 ID 吗?
按照分页进行无限循环,然后按照"Next" link直到找不到。
换句话说,来自:
关注 "Next" link 直到:
工作代码:
from urlparse import urljoin
import requests
from bs4 import BeautifulSoup
base_url = 'http://www.chess.com/'
game_ids = []
next_page = 'http://www.chess.com/home/game_archive?sortby=&show=live&member=Hikaru'
while True:
soup = BeautifulSoup(requests.get(next_page).content)
# collect the game ids
for link in soup.select('a[href^=/livechess/game?id=]'):
gameid = link['href'].split("?id=")[1]
game_ids.append(int(gameid))
try:
next_page = urljoin(base_url, soup.select('ul.pagination li.next-on a')[0].get('href'))
except IndexError:
break # exiting the loop if "Next" link not found
print game_ids
对于您提供的 URL (Hikaru
GM),它会为您打印所有页面的 224 个游戏 ID 列表。
我正在尝试收获一些国际象棋游戏,并在一些帮助下完成了基础知识 here.The 主要功能看起来像:
import requests
import urllib2
from bs4 import BeautifulSoup
r = requests.get(userurl)
soup = BeautifulSoup(r.content)
gameids= []
for link in soup.select('a[href^=/livechess/game?id=]'):
gameid = link['href'].split("?id=")[1]
gameids.append(int(gameid))
return gameids
基本上发生的事情是我为特定用户(例如 http://www.chess.com/home/game_archive?sortby=&show=live&member=Hikaru,grab 和 html 转到 url 并抓取 gameids.This 对于一页来说效果很好。 然而,一些用户玩了很多游戏,由于每页只显示 50 个游戏,他们的游戏被列在多个 pages.e.g http://www.chess.com/home/game_archive?sortby=&show=live&member=Hikaru&page=2(或 3/4/5 等) 那就是我所在的位置 stuck.How 我可以遍历页面并获取 ID 吗?
按照分页进行无限循环,然后按照"Next" link直到找不到。
换句话说,来自:
关注 "Next" link 直到:
工作代码:
from urlparse import urljoin
import requests
from bs4 import BeautifulSoup
base_url = 'http://www.chess.com/'
game_ids = []
next_page = 'http://www.chess.com/home/game_archive?sortby=&show=live&member=Hikaru'
while True:
soup = BeautifulSoup(requests.get(next_page).content)
# collect the game ids
for link in soup.select('a[href^=/livechess/game?id=]'):
gameid = link['href'].split("?id=")[1]
game_ids.append(int(gameid))
try:
next_page = urljoin(base_url, soup.select('ul.pagination li.next-on a')[0].get('href'))
except IndexError:
break # exiting the loop if "Next" link not found
print game_ids
对于您提供的 URL (Hikaru
GM),它会为您打印所有页面的 224 个游戏 ID 列表。