我想从 Steam 页面中提取总页码(本例中为 11)。我相信以下代码应该可以工作(返回 11),但它返回一个空列表。就像如果没有找到一样paged_items_paging_pagelink
class.
import requests
import re
from bs4 import BeautifulSoup
r = requests.get('http://store.steampowered.com/tags/en-us/RPG/')
c = r.content
soup = BeautifulSoup(c, 'html.parser')
total_pages = soup.find_all("span",{"class":"paged_items_paging_pagelink"})[-1].text
如果你检查页面来源,你想要的内容是不可用的。这意味着它是通过Javascript动态生成的。
页码位于<span id="NewReleases_links">
标签,但在页面源代码中 HTML 仅显示以下内容:
<span id="NewReleases_links"></span>
处理这个问题最简单的方法是使用Selenium.
但是,如果你查看页面源代码,就会发现文本Showing 1-20 of 213 results
可用。因此,您可以抓取它并计算页数。
所需的 HTML:
<div class="paged_items_paging_summary ellipsis">
Showing
<span id="NewReleases_start">1</span>
-
<span id="NewReleases_end">20</span>
of
<span id="NewReleases_total">213</span>
results
</div>
Code:
import requests
from bs4 import BeautifulSoup
r = requests.get('http://store.steampowered.com/tags/en-us/RPG/')
soup = BeautifulSoup(r.text, 'lxml')
def get_pages_no(soup):
total_items = int(soup.find('span', id='NewReleases_total').text)
items_per_page = int(soup.find('span', id='NewReleases_end').text)
return round(total_items/items_per_page)
print(get_pages_no(soup))
# prints 11
(注意:我仍然建议使用 Selenium,因为该网站的大部分内容都是动态生成的。像这样抓取所有数据会很痛苦。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)