javascript - 可以使用 scrapy 从使用 AJAX 的网站中抓取动态内容吗?

我最近一直在学习 Python,并且正在着手构建一个网络爬虫。这一点都不花哨。它的唯一目的是从博彩网站获取数据并将这些数据放入 Excel。

大部分问题都是可以解决的,但我遇到了一些麻烦。但是,我在一个问题上遇到了巨大的障碍。如果一个网站加载了一张马匹表格并列出了当前的投注价格,则此信息不在任何源文件中。线索是这些数据有时是实时的,数字显然是从某个远程服务器更新的。我 PC 上的 HTML 有一个漏洞,他们的服务器正在推送我需要的所有有趣数据。

现在我对动态网络内容的体验很低,所以这件事让我难以理解。

我认为 Java 或 Javascript 是一个关键,这经常弹出。

爬虫只是一个赔率比较引擎。有些网站有 API,但对于那些没有的网站,我需要它。我在 Python 2.7 中使用了 scrapy 库

如果这个问题过于开放,我深表歉意。简而言之,我的问题是:如何使用scrapy来抓取这些动态数据,以便我可以使用它?这样我就可以实时抓取这些投注赔率数据?

最佳答案

这是一个带有 AJAX 请求的 scrapy 的简单示例。让我们看看网站rubin-kazan.ru .

所有消息都使用 AJAX 请求加载。我的目标是获取这些消息及其所有属性(作者、日期、...):

当我分析页面的源代码时,我看不到所有这些消息,因为该网页使用了 AJAX 技术。但我可以使用 Mozilla Firefox 中的 Firebug(或其他浏览器中的等效工具)来分析在网页上生成消息的 HTTP 请求:

它不会重新加载整个页面,而只会重新加载包含消息的页面部分。为此,我单击底部的任意数量的页面:

我观察到负责消息正文的 HTTP 请求:

完成后,我分析请求的 header (我必须引用我将从 var 部分的源页面中提取的此 URL,请参见下面的代码):

以及请求的表单数据内容(HTTP方式为“Post”):

以及响应的内容,是一个JSON文件:

它提供了我正在寻找的所有信息。

从现在开始,我必须在scrapy中实现所有这些知识。让我们为此目的定义蜘蛛:

class spider(BaseSpider):
    name = 'RubiGuesst'
    start_urls = ['http://www.rubin-kazan.ru/guestbook.html']

    def parse(self, response):
        url_list_gb_messages = re.search(r'url_list_gb_messages="(.*)"', response.body).group(1)
        yield FormRequest('http://www.rubin-kazan.ru' + url_list_gb_messages, callback=self.RubiGuessItem,
                          formdata={'page': str(page + 1), 'uid': ''})

    def RubiGuessItem(self, response):
        json_file = response.body

parse 函数中,我有第一个请求的响应。 在 RubiGuessItem 我有包含所有信息的 JSON 文件。

https://stackoverflow.com/questions/8550114/

相关文章:

python - 关于如何在 python 中使用属性功能的真实示例?

linux - 重新加载 Flash 17 次会导致错误 #2046 并需要重新启动浏览器

python - Python 3.3+ 中的包不需要 __init__.py

python - 用python练习BDD

linux - ELF文件格式中的section和segment有什么区别

python - set() 是如何实现的?

linux - 如何为输出添加行号,提示行,然后根据输入进行操作?

linux - 有没有办法检查是否有指向目录的符号链接(symbolic link)?

linux - 如何在 Unix 系统上编辑二进制文件

python - 不区分大小写 'in'