pythonscrapy并不是从一个web页面获取所有html元素

2024-09-29 22:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Scrapy从以下url获取所有当前WWE超级明星的名字:http://www.wwe.com/superstars 但是,当我运行scraper时,它不返回任何名称。我相信(通过尝试其他模块的问题),问题是Scrapy没有找到页面中的所有html元素。我试图解决请求和漂亮汤的问题,当我查看请求得到的html时,它缺少了我在浏览器检查器中看到的html的重要方面。包含名称的html如下所示:

<div class="superstars--info"> == $0
    <span class="superstars--name">name here</span>
</div>

我的代码张贴在下面。是不是我做错了什么事导致这件事不起作用?在

^{pr2}$

Tags: namediv名称comhttpurlhtmlwww
2条回答

因为内容是由javascript生成的,所以有两个选择:使用类似selenium来模拟浏览器并解析html内容,或者如果可以的话,直接查询API。在

在这种情况下,这个简单的解决方案有效:

import requests
import json


URL = "http://www.wwe.com/api/superstars"

with requests.session() as s:
    s.headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0'}
    resp = s.get(URL).json()
    for x in resp['talent'][:10]:
        print(x['name'])

输出(前10条记录):

^{pr2}$

听起来这个网站有动态内容,可能是用javascript和/或xhr调用加载的。看看splash这是一个javascript呈现引擎,它的行为很像幻影js。如果你知道如何使用docker,splash的设置非常简单。完成splash设置后,您必须使用scrapy-splash插件将其与scrapy集成。在

相关问题 更多 >

    热门问题