我正在使用 Python Mechanize 打开具有这种格式的 URL...
https://www.simplewebsite.com?view=discussions#/?page=2
当页面打开时......它得到这个......
https://www.simplewebsite.com?view=discussions
完全绕过“#”标记后的内容......
任何线索如何打开网址?我花了很多时间在网上搜索......没有一个肯定的答案......
我正在使用 Python Mechanize 打开具有这种格式的 URL...
https://www.simplewebsite.com?view=discussions#/?page=2
当页面打开时......它得到这个......
https://www.simplewebsite.com?view=discussions
完全绕过“#”标记后的内容......
任何线索如何打开网址?我花了很多时间在网上搜索......没有一个肯定的答案......
该网站很可能依赖其 JavaScript 来解析 URL 的其余部分(在 之后#
);见window.location。
除非 Mechanize 能够以某种方式运行 JavaScript,否则您将无法获得想要的结果。尝试Selenium、Phantom.JS / Phantompy或类似的东西。
该站点实际上可能支持直接传递参数,然后您可以请求
https://www.simplewebsite.com?view=discussions&page=2
如果没有,您将不得不检查它发出的 AJAX 查询以请求您实际想要的数据。
出现在主题标签之后的 URL 部分是对 HTML 锚点的引用,它们由客户端(通常是 Web 浏览器)处理,并且永远不会发送到服务器。
该网站可能正在加载在页面加载时运行的 Javascript 代码。该代码解析锚名称并基于该名称更新页面。在这种情况下,很明显 javascript 代码必须向服务器发送一个 ajax 请求以获取第 2 页,然后更新 HTML 文档以显示该数据。
不幸的是,mechanize 将无法处理这种类型的网站,因为它依赖于在客户端上运行 Javascript 代码。您可能可以使用 phantom.js 执行类似的操作,这是一个可以运行客户端脚本的无头 Web 浏览器客户端。
您是否使用查询字符串:
view=discussions%23%2F%3Fpage%3D2
?? 例如:
import mechanize as mech
from urllib import urlencode
host = "http://localhost:8080/1.php"
data = {"view": "discussions#/?page=2"}
data = urlencode(data)
print "encoded data sent by python:\n\t", data
resp = mech.urlopen(host + "?" + data)
print resp.read()
它当然“有效”。对方是否知道如何正确解码和解析查询字符串是另一回事。例如,如果您在以下位置请求以下 php 程序http://localhost:8080/1.php
:
<?php
parse_str(
urldecode($_SERVER['QUERY_STRING']),
$data
);
//You might also call htmlentities() on the query string
//if a browser was going to display the result
echo "php received the following data:\n";
foreach($data as $key => $val)
{
echo "\t $key ----> $val \n";
}
?>
... python 程序输出:
encoded data sent by python:
view=discussions%23%2F%3Fpage%3D2
php received the following data:
view ----> discussions#/?page=2
至于这个:
When the page opens...it gets this... https://www.simplewebsite.com?view=discussions Completely bypassing what's after the "#" mark...
一个 RFC 说:
查询组件由第一个问号 ("?") 字符指示,并以数字符号 ("#") 字符或 URI 结尾终止。 https://www.rfc-editor.org/rfc/rfc3986#section-3.4