这两天找了个实习,名义是python工程师,其实就是写爬虫+整合到django。实习很奇葩,还有试用期的,现在试用期过了等后续安排,正好整理下这几天写爬虫的一些心得体会。
首先,感觉写爬虫真的是个经验活,一般的网站说白了就是不停往request里试参数。直接爬不行加headers=试试,看有提交的表单就加个data=试试。这里要区分下的是POST方法对应的是Form Data,可以通过request的data参数实现
request.post(data=data)
而GET方法对应的是Query String Parameters,一般采用拼接url的方法
base_url+urllib.urlencode(data)
至于提交表单的内容是什么,就要靠自己看html的标签或者js的函数得知,一般来说都能在html的源码里搜索到,可能是商品id,可能是页面相对路径的一部分,可能和时间相关,当然那些反爬网站提交的表单都是加密的,要想真正破解就要靠猜和试了。
然后对于一些需要模拟登录的网站,不需要验证码的话利用上面说的GET和POST表单应该就能解决,但有的网站还需要提供cookies,这时request就要包含cookies参数了。
requests.get(url, headers=header, cookies=cookie_dict)
而对于一些需要验证码登录的网站,也可以考虑先登录进去,然后复制下来登陆后的cookies,再利用其模仿登陆后的状态,但这招不一定总能成功。
说到这里突然想起之前爬学校能源网站查电费时,它一个非登录功能居然也要提供cookies才能成功响应,不知道是不是和框架有关,但总觉得好多此一举…
最后想说,之前碰到爬不动的网站,就想用phantomjs+selenium,因为感觉理论上没有这个方法爬不了的网站,但在实习时候就遇到了不行的情况,现在也没搞懂为什么。不过抛开个案不谈,phantomjs虽然好用,可现在越发觉得用它就和作弊一样,因为它就是个浏览器啊!个人用来爬少量数据还好,如果要爬商业用的大量数据request才是正道,毕竟用phantomjs比你直接用浏览器的效率都高不出哪里去。
总之无论是headers,data还是cookies,爬虫的精髓就是要尽可能的模仿真实浏览器的登录过程(知乎live 董伟明大大讲的),但抓到的包里有那么多参数,完全加进去不可能也没必要。至于具体使用哪些参数才能奏效,真的就要靠经验了。据说有那种层层迭代的反爬方法?上一个接受包含下一个请求的参数,但这种连环套路我还没有正是爬成功过,所以也不敢断言。
最后好想吐槽下这个实习,糟糕的老板(半懂不懂态度恶劣还固执僵硬),年幼的开发团队(真正在做事的就两个学生,一个异地的组长,一个半吊子的我…),混乱的代码管理(开发人员都是实习学生,更迭频繁,导致代码风格迥异,可读性健全性模块化都好差)。别说公司给不给留任,我自己都不想做了,但一想这是珍贵的第一份IT实习啊,就有不想放弃,哎呀,好烦。
说到这里突然想起之前爬学校能源网站查电费时,它一个非登录功能居然也要提供cookies才能成功响应,不知道是不是和框架有关,但总觉得好多此一举…
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试