我正在尝试解析facebook的首页,JSoup
但我总是得到移动设备的HTML代码而不是普通浏览器的版本(在我的情况下是Firefox 5.0).
我正在设置我的用户代理:
doc = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0")
.get();
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
编辑:
我刚刚解析了http://whatsmyuseragent.com/,看起来用户代理正在运行.现在,为什么网站http://www.facebook.com/在使用JSoup和我的浏览器时会返回不同的版本,这让我更加困惑.两者都使用相同的用户....
我现在也注意到了其他一些网站上的这种行为.如果你能向我解释问题是什么,我会非常高兴.
小智 49
您也可以尝试设置引荐来源标头:
doc = Jsoup.connect("https://www.facebook.com/")
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get();
Run Code Online (Sandbox Code Playgroud)
Sor*_*ter 32
Response response= Jsoup.connect(location)
.ignoreContentType(true)
.userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0")
.referrer("http://www.google.com")
.timeout(12000)
.followRedirects(true)
.execute();
Document doc = response.parse();
Run Code Online (Sandbox Code Playgroud)
用户代理
使用最新的用户代理.这是完整的清单http://www.useragentstring.com/pages/useragentstring.php.
超时
另外不要忘记添加timout,因为有时下载页面需要超过正常超时.
引荐
将引用设置为谷歌.
按照重定向
按照重定向进入页面.
execute()而不是get()
使用execute()获取Response对象.这可以帮助您检查内容类型和状态代码是否有错误.
稍后您可以解析响应对象以获取文档.
Facebook可能会在其请求中设置(然后期待)某些cookie,并认为缺少任何一个僵尸/移动用户/有限浏览器/其他东西的标头.
有关使用JSoup处理cookie的几个问题,但是您可能会发现使用HttpUrlConnection或Apache的HttpClient然后将结果传递给JSoup更简单.对您需要知道的所有内容的优秀撰写:使用java.net.URLConnection来触发和处理HTTP请求
调试浏览器和JSoup之间差异的一种有用方法是Chrome的网络检查员.您可以一次从浏览器向JSoup添加标题,直到获得预期的行为,然后精确缩小所需的标题.
归档时间: |
|
查看次数: |
48117 次 |
最近记录: |