我正在尝试使用python 3.5和漂亮的汤来清除蒸汽的每一页上的标题以播放搜索结果。但是,返回的结果只是第一页上的标题,而不是后续页面上的标题:
import requests
from bs4 import BeautifulSoup
titles_list=[]
for i in range(3): # Number of pages plus one
print(i)
url = 'http://store.steampowered.com/genre/Free%20to%20Play/?tab=MostPlayed#p' + str(i)
print(url)
soup = BeautifulSoup(requests.get(url).content)
titles=soup.find_all("div",{"class":"tab_item_name"})
for item in titles:
try:
name=item.text
except:
name='sdfsd'
print(name)
titles_list.append(name)
控制台结果(我知道0和1相同,但i = 2应显示不同的游戏组合):
0
http://store.steampowered.com/genre/Free%20to%20Play/?tab=MostPlayed#p0
Dota 2
Team Fortress 2
Warframe
Clicker Heroes
Unturned
Path of Exile
War Thunder
SMITE
Trove
AdVenture Capitalist
1
http://store.steampowered.com/genre/Free%20to%20Play/?tab=MostPlayed#p1
Dota 2
Team Fortress 2
Warframe
Clicker Heroes
Unturned
Path of Exile
War Thunder
SMITE
Trove
AdVenture Capitalist
2
http://store.steampowered.com/genre/Free%20to%20Play/?tab=MostPlayed#p2
Dota 2
Team Fortress 2
Warframe
Clicker Heroes
Unturned
Path of Exile
War Thunder
SMITE
Trove
AdVenture Capitalist
有谁知道这里发生了什么?
答案 0 :(得分:1)
您可以使用获取数据的基础GET请求,这对于解析更可靠,因为您没有获得javascript使用实际页面的URL呈现的详细信息。
使用firebug,我发现基础GET请求是(第2页):
从那里开始,使用以下脚本获取所有32页的所有标题。
import requests
import json
from bs4 import BeautifulSoup
import re
for i in range(0, 32):
start_count = i * 10;
jsonResponse = requests.get("http://store.steampowered.com/search/tabpaginated/render/"
"?query=&start="+str(start_count)+"&count=10&genre=37&tab=MostPlayed&cc=IN&l=english")
data = json.loads(jsonResponse.text)
soup = BeautifulSoup(data["results_html"], "html.parser")
alltitles = soup.find_all(attrs={'class': re.compile('tab_item_name')})
for title in alltitles:
print(title.text)
答案 1 :(得分:0)
我认为这里发生的是以" Dota 2"开头的列表。始终按原始请求加载到http://store.steampowered.com/genre/Free%20to%20Play/?tab=MostPlayed。
您可以在浏览器的开发者工具中检查它是否始终首先加载,而不管#p之后的数字。这也是您requests.get(url).content
获得的内容。
如果您在浏览器的末尾使用#p2刷新网址,则有时可以在显示其他列表之前看到第一个列表一秒钟。
我不确定在快速查看之后加载其他列表的内容,但必须是在请求发生后发生的事情。
答案 2 :(得分:0)
传统上,#
片段是页面内部客户端锚点,实际上并未传递给服务器。客户端JavaScript经常将其用于各种目的,因此这可能是这里发生的事情。您需要在客户端页面上运行或模拟JavaScript以获得后续结果。