爬虫套路之user-agent
爬虫
不管是python还是php,jsva,在你爬取网页的时候都是以python,php,java的‘名义’去爬取的页面,一旦网页发现了这些关键词的时候就不会返回你想要的数据,所以在python中就要自己设置user-agent:
常用的请求头chrome:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36
反爬原理
简单来说就是使用nginx条件判断每一次请求的User-Agent的值,在nginx配置文件下新建文件
> server{
> listen 80;
> server_name www.baidu.com; #自己服务器的域名
> charset utf-8;
> location /user/admin/ {
> if ($http_user_agent ~* (python)){
> return 403;
> }
> root /roor/www/html;
> index index.html
> }
> }
这段的意思就是查找请求头中是否有python,如果有返回403,
在root指令设定的目录下简历层级目录/user/admin 最后在admin目录中放index.html文件,保存后,向nginx发送重新加载配置的信号立即生效,
先利用
/usr/local/nginx/sbin/nginx -t测试配置文件修改是否正常
/usr/local/nginx/sbin/nginx -s reload重新加载
Cookie 反爬虫
爬虫
1.规定入口
有的时候页面回去判断你从何处来到这个页面的,处理的方式也是千奇百怪,譬如说User-Agent的Referer,还有就是Cookie,那Cookie和Referer一样,把页面上的Cookie写在你的headers中就好了
反爬
1.规定入口实现
默认的爬虫是只请求HTML文本资源不会主动保存Cookie。 但是浏览器会自动检查是否存在,若存在则保存到本地,且往后的每次请求都会自动携带对应的Cookie值,这个时候只需要在服务端进行效验即可,也是在nginx的配置文件中添加就好了
>location /user/admin/login.html {
> #在响应头中设置固定的Cookie值
> add_header Set-Cookie *cookir-first=12er56yu78op*
> root /roor/www/html;
> index login.html
>}
>location /user/admin/index.html {
> #如果请求头中的Cookie值不符合要求,则将网页临时重定向到login.html
> if ($http_cookie !~*"cookir-first=12er56yu78op"*){
> rewrite index.html ./login.html redirect;
> }
> root /roor/www/html;
> index index.html
>}
配置好之后还是要重新加载nginx的配置
直接写死的方式比较简单,可以通过js自动生成,然后传到后台匹配,(EG:时间戳+用户id的md5加密,前后台对比)
(ng也可以使用正则,或者跟lua语言结合,nginx有个ngx_http_lua_module模块)
字体
有的时候在html上面显示的数字在爬取下来的地方居然是乱码
这是因为反爬使用了新的字体格式,也就是.woff文件,我的处理方式就是将.woff文件下载下来
然后进行转换
from fontTools.ttLib import TTFont
font = TTFont(path)
font.saveXML(newpath)
将你的woff文件转化为xml文件然后进行对比就好了