今天跟大家分享几个
在爬虫中可以常用到的小技巧
技巧Ⅰ
爬取人家网站的时候频率不要太高,
有事没事睡一会,睡久了没效率
睡短了,被反爬了,那就尴尬了…
随机数更具有欺骗性
所以睡多久,random决定!
import time
import random
for i in range(1,11):
time = random.random()*5
print(f'第{i}次睡了:', time, 's')
'''
第1次睡了: 0.6327309035891232 s
第2次睡了: 0.037961811128097045 s
第3次睡了: 0.7443093721610153 s
第4次睡了: 0.564336149517787 s
第5次睡了: 0.39922345839757245 s
第6次睡了: 0.13724989845026703 s
第7次睡了: 0.7877693301824763 s
第8次睡了: 0.5641490602064826 s
第9次睡了: 0.05517343036931721 s
第10次睡了: 0.3992618299505627 s
'''
所以可以试着在爬虫代码加入这句代码
让子弹飞一会
time.sleep(random.random()*5)
技巧Ⅱ
User-Agent中文名为用户代理,简称 UA,
它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
简单来说就是模拟浏览器去访问页面,
这样才不会被网站反爬到。
但是哪里去搞user-agnet呢?【资料获取】
from fake_useragent import UserAgent
for i in range(1,11):
ua = UserAgent().random
print(f'第{i}次的ua是', ua)
'''
第1次的ua是 Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36
第2次的ua是 Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0
第3次的ua是 Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; es-es) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
第4次的ua是 Mozilla/5.0 (X11; CrOS i686 4319.74.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.57 Safari/537.36
第5次的ua是 Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; fr-ch) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
第6次的ua是 Mozilla/5.0 (X11; OpenBSD i386) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36
第7次的ua是 Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36
第8次的ua是 Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0
第9次的ua是 Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; Zune 3.0)
第10次的ua是 Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36
'''
够用不?
所以可以试着在爬虫代码加入这句代码
让ua更具有欺骗性
headers= {'User-Agent':str(UserAgent().random)}
技巧Ⅲ
巧用pprint
这跟上面那个效果差不多,只不过刚才那个是在浏览器中查看的
而这个我们是在pycharm中查看的
来看效果吧
import requests
url = 'https://www.douyu.com/gapi/rknc/directory/yzRec/1'
resp = requests.get(url).json()
print(resp)
在这里插入图片描述
好吧,这种print()打印,有点太乱了
pprint()打印,这种结构看起来如何呢?
from pprint import pprint
import requests
url = 'https://www.douyu.com/gapi/rknc/directory/yzRec/1'
resp = requests.get(url).json()
pprint(resp)
在这里插入图片描述
技巧Ⅳ
对于页面解析最强大的当然是正则表达式,这个对于不同网站不同的使用者都不一样,就不用过多的说明,附两个比较好的网址:【资料获取】
正则表达式入门:
正则表达式在线测试:
其次就是解析库了,常用的有两个lxml和BeautifulSoup,对于这两个的使用介绍两个比较好的网站:
lxml:http://my.oschina.net/jhao104/blog/639448
BeautifulSoup:http://cuiqingcai.com/1319.html
对于这两个库,我的评价是,都是HTML/XML的处理库,Beautifulsoup纯python实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;
lxml C语言编码,高效,支持Xpath。
技巧Ⅴ
在一些网站服务中,除了对 user-agent 的身份信息进行检测、也对客户端的 ip 地址做了限制,
如果是同一个客户端访问此网站服务器的次数过多就会将其识别为爬虫,
因而,限制其客户端 ip 的访问。这样的限制给我们的爬虫带来了麻烦,所以使用代理 ip 在爬虫中是非常有必要的。
这里我给大家提供一下两个网站供参考
https://shimo.im/docs/dvcTt3dJVVxCjrGj/
66代理:http://www.66ip.cn/6.html
大家可以将这些ip使用爬虫下载到本地,然后检查每一个ip的状态码判断其是否可用。这样每次使用爬虫下载文件的时候。只需使用random随机使用一个就可以。
技巧Ⅵ
验证码我们在很多网站会遇到,如果请求量大了之后就会遇到验证码的情况。
让人诟病的12306,其实也是一定程度上的防止非正当请求的产生。
对于验证码,可以通过OCR来识别图片,Github上面有很多大神分享的代码可以用,可以去看看。
简单的OCR识别验证码:
from PIL import Image
import tesserocr
#tesserocr识别图片的2种方法
img = Image.open("code.jpg")
verify_code1 = tesserocr.image_to_text(img)
#print(verify_code1)
verify_code2 = tesserocr.file_to_text("code.jpg")
技巧Ⅶ
headers这应该是最常见的,最基本的反爬虫手段,主要是初步判断你是否是真实的浏览器在操作。
遇到这类反爬机制,可以直接在自己写的爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中。
以edge浏览器为例,浏览器中打开页面;
- 第一步:点击上图中“网络”标签,然后刷新或载入页面
-
第二步:在右侧“标头”下方的“请求标头”中的所有信息都是headers内容,添加到请求中即可。
在这里插入图片描述
怎么样,这些小技巧运用起来是不是有帮助有效解决一些问题。
如果还有其他的好用小技巧也可以一起分享哦,一起探索和学习!
码字不易,喜欢的点个关注+收藏吧,感谢观看!
网友评论