我目前使用watir做网站抓取隐藏所有数据来自通常的HTML源的网站。如果我没有错,他们正在使用XML和AJAX技术来隐藏它。 Firefox可以看到它,但它通过“DOM源选择”显示。在txt模式下的网页抓取
一切工作正常,但现在我正在寻找一个等效的工具watir,但一切都需要在没有浏览器的情况下完成。一切都需要在txt文件中完成。
事实上,现在watir正在使用我的浏览器来模拟页面,并将我看到的整个html代码返回给我。我想同样的,但没有浏览器。
可能吗?
感谢 问候 德
我目前使用watir做网站抓取隐藏所有数据来自通常的HTML源的网站。如果我没有错,他们正在使用XML和AJAX技术来隐藏它。 Firefox可以看到它,但它通过“DOM源选择”显示。在txt模式下的网页抓取
一切工作正常,但现在我正在寻找一个等效的工具watir,但一切都需要在没有浏览器的情况下完成。一切都需要在txt文件中完成。
事实上,现在watir正在使用我的浏览器来模拟页面,并将我看到的整个html代码返回给我。我想同样的,但没有浏览器。
可能吗?
感谢 问候 德
你最好的猜测是使用像webscarab并捕获AJAX的URL的请求您的浏览器做的事情。
通过这种方式,您可以通过模拟任何HTTP库中的这些调用来抓取“重要”数据。
这可能需要一点Python编码。
我写了一个简单的脚本来获取货运办事处的位置。
先用谷歌浏览器的步骤
您将GetTownByCity在左侧窗格中,单击它并检查它。
Request URL: (...)/_layouts/ArikanliHolding.YurticiKargo.WebSite/ajaxproxy- sswservices.aspx/GetTownByCity
Request Method:POST
Status Code:200 OK
在Request Payload
树项目,你会看到
Request Payload :{cityId:34}
头。
这将指导我们实现一个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...
注意,该代码是我工作的代码的一部分,它是写在飞行中,最重要的是我没有测试它。它可能需要很小的修改来运行它。