python web scraping-len(containers)始终返回0

时间:2019-04-17 22:50:23

标签: python html web-scraping

我正在尝试从他们的online pokedex中抓取口袋妖怪信息,但是我在findAll()功能上遇到了麻烦。我有:

containers = page_soup.findAll("div",{"class":"pokemon-info"})

但是我不确定这div是否是我需要看的地方,因为(参见照片html),这个divli内部,所以也许我应该在其中搜索,就像这样:

 containers = page_soup.findAll("li", {"class":"animating"})

但是在两种情况下,当我使用len(containers)时,即使有多个条目,返回的长度也始终为0。

我也尝试过find_all(),但是len()的结果是相同的。

2 个答案:

答案 0 :(得分:0)

问题在于BeautifulSoup无法阅读javascript。正如Furas所说,您应该打开网页并关闭javascript(here's how),然后查看是否仍然可以访问所需的内容。如果不能,则需要使用Selenium之类的控件来控制浏览器。

答案 1 :(得分:0)

根据其他评论和答案的建议,该网站正在后台加载数据。对此最常见的响应是使用硒。我的方法是先检查Chrome中是否有API调用。对我们来说幸运的是,该页面在加载时检索了953个神奇宝贝。

下面是一个脚本,该脚本将检索干净的JSON数据,而here是我写的一篇简短文章,解释了Selenium首先使用chrome开发人员工具的情况。

# Gotta catch em all

import requests
import pandas as pd

headers = {

    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Referer': 'https://www.pokemon.com/us/pokedex/',
    'Connection': 'keep-alive',
}

r = requests.get('https://www.pokemon.com/us/api/pokedex/kalos', headers=headers)
j = r.json()

print(j[0])