【问题标题】:Scrapy - How to extract XmlHttpRequests url from a given website?Scrapy - 如何从给定网站中提取 XmlHttpRequests url?
【发布时间】:2016-06-18 08:59:08
【问题描述】:

我有兴趣只提取 XHR 的网址,而不是网页中的每个网址:

这就是我提取页面中每个 url 的代码:

import scrapy
import json
from scrapy.selector import HtmlXPathSelector

from scrapy.spiders import CrawlSpider, Rule, Spider
from scrapy.linkextractors import LinkExtractor

class test(CrawlSpider):
    name = 'test'
    start_urls = ['SomeURL']
    filename = 'test.txt'

rules = (

    Rule(LinkExtractor(allow=('', )) ,callback='parse_item'),
)

def parse_item(self, response):
    # hxs = HtmlXPathSelector(response)
    with open ('test.txt', 'a') as f:
        f.write (response.url + '\n' )

谢谢,

编辑: 你好,感谢cmets。 经过更多研究,我发现了这个:Scraping ajax pages using python 我想要的是自动做这个答案。对于大量网页,我需要这样做,并且手动插入网址不是一种选择。 有没有办法做到这一点?监听站点的 XHR 请求并保存 url?

【问题讨论】:

  • 请提及错误/疑问。您的问题不清楚。
  • 我不熟悉 XHR(虽然我刚刚读过它们),你能分辨出 XHR 和“普通”URL 之间的区别吗?也许是“api”?
  • 您考虑过使用crummy.com/software/BeautifulSoup/bs4/doc 吗?这是解析 html/xml 文档的好方法...
  • XmlHttpRequests ("AJAX") URL 是由 JavaScript 动态创建和获取的。您将无法在抓取的页面中找到这些 URL(尝试查看页面的源代码:您是否看到 html 标记中的 URL?如果不是这样,scrapy 也看不到它们)。这意味着您将需要另一种抓取方式。对页面获取的 XHR URL 序列进行逆向工程,或者使用“无头”浏览器,如 SeleniumPhantomJS
  • @GregSadetsky 我同意无头浏览器是前进的方向。我们将不得不强制所有请求通过代理,然后根据请求类型将它们过滤掉,对吗?

标签: xmlhttprequest scrapy web-crawler


【解决方案1】:

没有可靠的单一方法来获取网页的“AJAX URL”。网页可以使用任意数量的 AJAX URL(其中大部分不是您要查找的),并且可以通过非常不同的方式触发它们。

另外,URL 本身很少有用,每个都可以返回任何类型的数据,而且通常是您感兴趣的数据。

您应该逐个网站手动查找 AJAX URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多