该博客记录个人在写爬虫代码是,不同网站下碰到的问题:
1.例:爬取天猫网站的店铺名是,根据页面标签获取div 为空 。分析:通过下载页面信息,发现,店铺名的div跟网站上的不同。所以 网站上的div是通过js等文件生成,本身并不存在。要根据下载下来的页面信息div进行获取。
2.例:爬取淘宝网站分类信息,会出现爬虫验证,输入验证码。分析:有三种解决办法1.设置爬虫的时间间隔,伪装的更像人为操作。2.通过代理进行爬取(设置代理Ip池,ip不能使用马上替换IP)3.Seleium 无界浏览器实现(模拟浏览器操作)此浏览器也可用于 动态加载页面,可直接获取动态的信息。
3.例:对于各类网站有评论信息等信息,都是通过动态加载实现。分析:通过fiddle抓包分析url,通过正则或者JSONObject来获取数据。
4.例:爬取天猫的物品销量信息的动态数据时,url单独打开报404错误。分析:这种url设置了访问权限,只能通过其他方法获取信息:如从list页面取到,带到detail页面
5.例:马蜂窝爬取游记信息 列表页面,所有的列表html代码是通过json数据动态加载,翻页数据通过动态post请求加载。分析:先通过抓包得到url然后获取动态json数据,通过JSONObject解析,获取对应html代码的值,最后转化为Document对象进行解析
6.例:淘宝list页面,list信息由json动态加载,但url到浏览器打开,出错。分析:url是json数据,但需要删减掉一些参数,才能在浏览器打开。并且淘宝页面第1页的json Url有误,通过第二页url分析出第一页url,进行解析。附:内容去重时,需要重写equals和HashCode方法。
7.例:爱无忧保险,爬取所有选择条件下的金额,金额的post请求为json数据,并且数据中一个参数有js代码计算得到。分析:首先 post请求为json数据,在请求时要添加请求头content-type信息。对于 js计算的参数,先谷歌f12 研究js代码,找到数据源,存储到本地。通过io读出,存到map中。自己根据添加拼凑key,取出对应value。(附url:http://www.e-nci.com/product/40345DC61D2621D5E0506E0AAE0149D9/D001?channel_id=448&expand_para1=xhjkx)
8.例:58同城获取hr信息,页面上只有点击申请职位后,才能获取到联系电话。分析:首先研究网站,正常思路,先抓包,发现申请职位和电话沟通没有具体的url链接。研究网站发现电话沟通是通过js加载,谷歌f12 打电话沟通的相关的js 断点。研究js代码发现参数tel 在页面加载时就已经加载完成。所以58 获取hr联系电话等信息不需要申请职位和登录就可以获取到。(如果js断点打了没生效,可以f12点击电话号码查看 图片链接。解析url)
9.例:浙江人才网根据关键字搜索工作,请求数据为post请求。请求头信息填写完毕后无法获取。分析:研究网站。发现这个post请求是根据页面进行加载,所以请求头中需要填写Referer信息 才能正确的加载内容。
此文章长期更新。