Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python web刮片-len(容器)始终返回0_Python_Html_Web Scraping - Fatal编程技术网

python web刮片-len(容器)始终返回0

python web刮片-len(容器)始终返回0,python,html,web-scraping,Python,Html,Web Scraping,我正试图从他们的网站上抓取口袋妖怪的信息,但我在使用findAll()函数时遇到了问题。我有: containers = page_soup.findAll("div",{"class":"pokemon-info"}) 但我不确定这个div是否是我需要查看的地方,因为(见图)这个div在一个li中,所以也许我应该在其中搜索,比如: containers = page_soup.findAll("li", {"class":"animating"}) 但是在这两种情况下,当我使用len(c

我正试图从他们的网站上抓取口袋妖怪的信息,但我在使用
findAll()
函数时遇到了问题。我有:

containers = page_soup.findAll("div",{"class":"pokemon-info"})
但我不确定这个
div
是否是我需要查看的地方,因为(见图)这个
div
在一个
li
中,所以也许我应该在其中搜索,比如:

 containers = page_soup.findAll("li", {"class":"animating"})
但是在这两种情况下,当我使用
len(containers)
时,返回的长度总是0,即使有几个条目


我还尝试了
find_all()
,但是
len()
的结果是相同的

问题是BeautifulSoup无法读取javascript。正如furas所说,您应该打开网页并关闭javascript(),然后看看是否仍然可以访问您想要的内容。如果不能,则需要使用类似的方法来控制浏览器。

问题是BeautifulSoup无法读取javascript。正如furas所说,您应该打开网页并关闭javascript(),然后看看是否仍然可以访问您想要的内容。如果不能,则需要使用类似的方法来控制浏览器。

正如其他评论和答案所建议的,站点正在后台加载数据。对此最常见的反应是使用硒;我的方法是首先检查Chrome中的任何API调用。幸运的是,该页面检索到加载的953口袋妖怪

下面是一个脚本,它将检索干净的JSON数据,这是我写的一篇小文章,解释了在Selenium上第一次使用chrome developer工具

# 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])

正如其他评论和回答所建议的,该站点正在后台加载数据。对此最常见的反应是使用硒;我的方法是首先检查Chrome中的任何API调用。幸运的是,该页面检索到加载的953口袋妖怪

下面是一个脚本,它将检索干净的JSON数据,这是我写的一篇小文章,解释了在Selenium上第一次使用chrome developer工具

# 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])

打开web浏览器,关闭JavaScript并加载url。你会看到BS能看到什么。页面使用JavaScript加载数据,BS无法运行JavaScript。您需要Selenium来控制web浏览器,该浏览器将加载url并运行JavaScript,然后您可以将HTML从Selenium获取到BS,或者使用Selenium中的函数来搜索元素(单击按钮等)打开web浏览器,关闭JavaScript并加载url。你会看到BS能看到什么。页面使用JavaScript加载数据,BS无法运行JavaScript。您需要Selenium来控制web浏览器,它将加载url并运行JavaScript,然后您可以将HTML从Selenium获取到BS,或者使用Selenium中的函数来搜索元素(单击按钮等)