改变身份
在爬取很多网站的时候需要改变自己的身份,否则直接被截取无法爬取
因此我们需要在get的时候加入headers
herders
用的参数 user-agent
比如我们用百度爬虫的身份:
herders = {‘user-agent’: ‘Baiduspider’}
常见的User Agent
1.Android
Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
2.Firefox
Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
3.Google Chrome
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
4.iOS
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
proxies
在国内有很多好人已经给你准备好许多ip了:
西刺代理——免费ip 就可以隐藏自己的ip了
proxies = {
‘http’: ‘118.187.58.34:53281’,
}
resp = requests.get(url, headers=herders, proxies=proxies)
在写爬虫之前我们需要了解数据的储存,例如cookie值
用户跟踪方式
1.cookie6
2.url——传入地址
3.hide——对用户提交表单中隐藏键
cookie与session关系已经为什么要用
cookie保存的事session的id 通过id才能拿到session的值
cookie的储存方式:
持久化(maxage设置时间)
基于浏览器窗口的(关了浏览器就没了)
因此需要对数据进行持久化
数据序列化和压缩
在储存数据的时候我们需要考虑数据的大小是否容易储存,因此可以对数据进行压缩
序列化:pickle 成字节模式
压缩:zlib
需要注意的是解压数据必须要先对其序列化
- pickle.dumps()将数据序列化
- zlib.compress()压缩数据
- zlib.decompress()解压缩
- pickle.loads()解序列化
数据的加密
需要用到单向哈西函数(哈西摘要)
不可逆
可以理解为将数据进行摘要话,只提取摘要的部分,因此不可逆转,如果需要匹配是否成功,就对进行输入的数据进行哈西处理,对两个数的哈西数是否相同即可
from hashlib import md5, sha1
都是进行哈西加密区别在于长度不同,md5是128bit,sha1是192bit
这里和解压是一样的都需要解析成直接才能对其进行加密
# 导入md5加密
hasher = md5()
# hasher = sha1()
# 传入参数(123)并且用utf-8解析成字节(必须是字节)并对(123)md5加密
hasher.update('123'.encode('utf-8'))
# 显示出结果
hasher.hexdigest()
因此在写入代码的时候想要把结果进行哈西处理和压缩的时候可以这样写
储存数据
将我们的数据进行持久化
mysql
写入原生的sql语句然后,execte就可以
拓展:executemany
一般的execte表示获取一个值然后储存进去,这样即好时又费力,因此我们可以先把要传入的数据写在一个元组里,最后对其保存
executemany可以传入多个元组,这样最后在提交到数据库的时候可以计提提交,节约时间
ll_list=[]
ll_list.append((headings[0], link))
cursor.executemany('insert into tb_result (rtitlr,rurl) values (%s, %s)',(ll_list))
coon.commit()