1

我目前正在使用 watir 对网站进行网络抓取,以隐藏通常 HTML 源中的所有数据。如果我没记错的话,他们是在使用 XML 和那些 AJAX 技术来隐藏它。Firefox 可以看到它,但它是通过“DOM 选择源”显示的。

一切正常,但现在我正在寻找与 watir 等效的工具,但一切都需要在没有浏览器的情况下完成。一切都需要在txt文件中完成。

事实上,现在,watir 正在使用我的浏览器来模拟页面并将我正在查找的整个 html 代码返回给我。我也想一样,但没有浏览器。

可能吗 ?

谢谢问候德

4

2 回答 2

1

您最好的猜测是使用类似webcarab的东西并捕获您的浏览器正在执行的 AJAX 请求的 URL。
这样,您可以自己通过使用任何 HTTP 库模拟这些调用来获取“重要”数据

于 2010-07-14T08:47:50.100 回答
0

可以通过一点 Python 编码来实现。

我编写了一个简单的脚本来获取货运办公室的位置。

第一步

  1. 例如,用谷歌浏览器打开 ajax 页面,用土耳其语,但你可以理解它。 http://www.yurticikargo.com/bilgi-servisleri/Sayfalar/en-yakin-sube.aspx
  2. 按 F12 显示底部开发人员工具并导航到网络选项卡。
  3. 导航底部的XHR选项卡。
  4. 通过在第一个组合框中选择一个项目来发出 AJAX 请求。并转到标题选项卡
  5. 您将GetTownByCity在左窗格中,单击它并检查它。

    Request URL: (...)/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy- sswservices.aspx/GetTownByCity

    Request Method:POST

    Status Code:200 OK

  6. Request Payload树项目中,您将看到

    Request Payload :{cityId:34} 标题。

  7. 这将指导我们实现 python 代码。

我们开始做吧。

#!/usr/bin/env python
# -*- coding: utf-8 -*-    
import requests
import json
# import simplejson as json
baseUrl = 'http://www.yurticikargo.com/'
ajaxRoot = '_layouts/ArikanliHolding.YurticiKargo.WebSite/'
getTown = 'ajaxproxy-sswservices.aspx/GetTownByCity'
urlGetTown = baseUrl + ajaxRoot + getTown
headers = {'content-type': 'application/json','encoding':'utf-8'}  # We are sending JSON headers, equivalent to Python dictionary
for plaka in range(1,82): # Because Turkiye has number plates from 1 to 81
    payload = {'cityId':plaka}
    r = requests.post(url, data=json.dumps(payload), headers=headers)
    data = r.json() # Returning data is in JSON format, if you need HTML use r.content()
    # ... Process the fetched data with JSON parser,
    # If HTML format, Beautiful Soup, Lxml, or etc...

请注意,此代码是我工作代码的一部分,它是即时编写的,最重要的是我没有测试它。它可能需要进行一些小的修改才能运行它。

于 2013-11-29T12:26:17.013 回答