公司最近要求我爬取商标局的信息, 于是我到商标局上看了看.
一看我当时就傻眼了 , 商标局的商标信息和一般的垂直网站不同,要输入一定的条件才可以浏览,比如:注册号.
在输入完注册号后点击查询才有一个列表,列表中有一个是注册号的字段,这个字段是有一个点击跳转到输入验证码的js事件.
输入验证码后,才会正式显示一个商标的信息,,而我要做的就是把这个页面爬取下来.
  好吧 看起来很繁琐,我说的也有点蒙.但是过程是正确的我先把信息页面源码手动存到本地,做了一个demo貌似可以
于是我去掉了点击查询,去掉了输入验证码点击提交,都是以发送请求的方式在连接中添加参数的方式访问,浏览器可以做到啊
但是验证码失效或在信息页面直接刷新就会跳到 提示没有输入验证吗的页面问题是什么呢?问题来了:
 我用java中HttpURLConnection模拟浏览器做请求并在程序中手动修改验证码参数. 然后下载网页源码.本以为万无一失,但是我下载下来的源码竟然是提示没有输入验证码的页面.请问这是为什么啊 ?该怎么解决啊 给个办法啊 ..

解决方案 »

  1.   

    真相只有一个,那就是你模仿的不到位模拟主要有以下几个方面:
    1.sessionid,无论是哪种后台只要它使用session一定会有一个SessionId,这个ID必须是每次访问现申请的,不能一直使用一个不变的,因它会过期;
    2.cookie,sessionid也是以cookie的形式存放在计算机上的,我们需要确定这个请求需要哪些cookie,它们是访问哪个页面的时候被种到我们的浏览器中的;
    3.参数,get或post请求的参数,这个没什么好说的了,一定要写对;
    4.reference,有时候防盗链技术会用这一个东西。如果正常的请求里面没有就算了。附:如何查看请求。
    使用chrome或firefox的开发者工具,在network那一栏中有记录所有的请求,点击可以查看详情。注意要配置它们在导航后不要清除记录。
      

  2.   

    1、java 自带的HttpURLConnection不适合用来搞这些东西,建议楼主使用Apache的httpclient组件处理。
    2、为了能够顺利使用程序请求成功,建议先使用httpwatch捕获该网站的每一个请求url(开启httpwatch后,在浏览器中手动操作一遍,即可记录所有请求url,包括接口、静态资源和js文件等),仔细分析之后再动手编写代码。主要需要主要请求的header、refer等信息。
      

  3.   


    你仔细看看源码,加载验证码的内容可能是通过javascript异步动态加载,而非直接由服务端生成的。
      

  4.   

    我也觉得是JSESSIONID没有粘滞上去。
      

  5.   

    你的整个思路错了,商标局的数据不用这么查呢,他们有公告的word文件,你采集word文件就行了,至于老数据或历史数据,很多公司都有,我这都有的。
      

  6.   

    httpclient也不适合做这个..httpclient使用的是html dom接口..这个接口麻烦的..
    你应该使用可以解析ajax的浏览器组件,...使用swt.broser或者使用 selenium  吧,容易的... 这个使用的gui接口,容易的...
      

  7.   

    哈哈  无意中看到一个大牛分析的商标网反爬技术文章,推荐给大家观摩观摩:https://zhuanlan.zhihu.com/p/29196829