Blu*_*ire 1 java web-scraping jsoup
我正在使用JSoup连接到网页并从中抓取数据,但它给了我一个HTTP 403响应(不像我的浏览器,它成功加载它).根据我的理解,我必须让我的刮刀假装它是一个浏览器.我尝试过两件事:将用户代理设置为浏览器,并将引用者设置为同一个网站(我通过浏览StackOverflow获得这两个).然而,我仍然得到403.我的代码看起来像这样(我知道浏览器已经老了,我只是复制它,当然它应该没关系?):
Document doc = Jsoup.connect("http://www.website.com/subpage/")
.userAgent("\"User-Agent\", \"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11\"")
.referrer("http://www.website.com")
.get();
Run Code Online (Sandbox Code Playgroud)
我还需要做些什么才能诱使服务器认为我是浏览器?
由于您可以使用浏览器成功加载页面(200?),因此可以使用该信息创建Jsoup连接.
在开发视图中打开浏览器的网络选项卡,查看请求并模仿它.例如,对此页面的GET看起来像
Host: stackoverflow.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0)
Gecko/20100101 Firefox/46.0
Accept: application/json, text/javascript; q=0.01
Accept-Language: sv-SE,sv;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Referer: http://stackoverflow.com/questions/37134906/fake-being-a-browser-to-avoid-a-403-error
Content-Length: 263
Cookie: x; prov=x; acct=t=wx
DNT: 1
Connection: keep-alive
Run Code Online (Sandbox Code Playgroud)
所有这些都有相应的Jsoup方法.这应该足以欺骗Web服务器.
如果您仍然遇到问题,则应记录实际请求以查看是否按预期发送.
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |