请求具有base64数据编码的URL

时间:2017-09-03 15:43:32

标签: python json web-scraping scrapy base64

我正在尝试请求一个包含base64编码数据的URL,如下所示:

http://www.somepage.com/es_e/bla_bla#eyJkYXRhIjp7ImNvdW50cnlJZCI6IkVTIiwicmVnaW9uSWQiOiI5MjAiLCJkdXJhdGlvbiI6NywibWluUGVyc29ucyI6MX0sImNvbmZpZyI6eyJwYWdlIjoiMCJ9fQ==

我所做的是构建一个JSON对象,将其编码为base64,并将其附加到这样的URL:

new_data = {"data": {"countryId": "ES", "regionId": "920", "duration": 7, "minPersons": 1}, "config": {"page": 2}}
json_data = json.dumps(new_data)
new_url = "http://www.somepage.com/es_es/bla_bla#" + base64.b64encode(json_data)
yield scrapy.Request(url=new_url, callback=self.parse)

问题是Scrapy只会抓取网址http://www.somepage.com/es_es/bla_bla的这一部分,而不会对数据进行编码并附加到其中...但是,如果我将new_url粘贴到浏览器中,它会向我显示结果我想用数据编码!

不知道发生了什么......有人能帮我一把吗?

1 个答案:

答案 0 :(得分:0)

经过大量搜索,我发现这种网址,最后一个#的网址(即我的网址http://www.somepage.com/es_e/bla_bla#eyJkYXRhIjp7ImNvdW50cnlJZCI6IkVTIiwicmVnaW9uSWQiOiI5MjAiLCJkdXJhdGlvbiI6NywibWluUGVyc29ucyI6MX0sImNvbmZpZyI6eyJwYWdlIjoiMCJ9fQ==)称为 片段网址< / em> 基本上它们表示资源中的位置,例如锚点(您可以读取它here)。

然后,感谢这个post我了解到这些内容需要由页面加载,因此网站本身会请求获取该数据(传出请求),所以我所做的就是搜索使用Firefox Developer Edition的那些 传出请求 (您可以使用任何其他系统向您显示这些请求,例如Tamper Data),并构建为我提供HTML内容的URL正在寻找。

# The base64 data encoded as a JSON is appended after the 'searchRequest=' instead of using the '#' element, and voilà!
"http://www.somewebsite.es/?controller=ajaxresults&action=getresults&searchRequest=eyJkYXRhIjp7ImNvdW50cnlJZCI6IkVTIiwicmVnaW9uSWQiOiI5MjAiLCJkdXJhdGlvbiI6N30sImNvbmZpZyI6eyJwYWdlIjoiMCJ9fQ=="

我也可以通过使用 Selium 库实现这一目标,正如您在其他post中看到的那样,但这不是最佳做法...