带你走进 @ 机器人时代
Discover 点击上面蓝色文字,关注我们
网络爬虫相信大家都不陌生,有很多朋友学习Python就是冲网络爬虫而来。我们先来写一段代码实现爬虫的基本技术:
import urllib.Request # urlopen()向URL发请求,返回响应对象 response=urllib.request.urlopen('http://www.baidu.com/') # 提取响应内容 html = response.read().decode('utf-8') # 打印响应内容 print(html)
运行后,输出窗口得到:
在上一篇文章中,我们介绍了基本的字符串处理办法,将抓取的网页字符清洗后得到我们想要的数据,参看文章:【工资翻三倍】系列:Python爬虫初体验,一秒钟完成老板交代的工作
但是这里有一个严重的问题,目前很多网站都有反爬虫技术,如果发现你使用爬虫程序访问网站,直接就拉黑你的IP,拒绝访问。
我们来看看下面的代码(访问http测试网站):
import urllib.request response=urllib.request.urlopen('http://httpbin.org/get') p= response.read().decode() print(p)
运行后得到:
大家可以看到绿色的框内Python-urllib/3.10的字样,显然这是爬虫程序的访问。如果网站读取到这个数据之后立即启动拒绝机制,那你后面的访问就失败了,严重的还会拉黑你的IP。
怎么办呢?我们来改一下代码看看:
from urllib import request url = 'http://httpbin.org/get' s = { 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0'} e = request.Request(url=url,headers=s) r = request.urlopen(e) out = r.read().decode('utf-8') print(out)
输出结果:
用s变量定义浏览器信息伪装,这里我们看这样就解决了网站通过识别 User-Agent 来封杀爬虫程序的问题。
如果我们想要更多的浏览器信息随机进行访问怎么办呢?看下面的代码:
import random from fake_useragent import UserAgent ua=UserAgent() q=[ua.ie,ua.firefox,ua.Chrome] p=[] for i in range(20): w=q[random.randint(0,2)] p.append(w) print(p)
我们调用fake_useragent的UserAgent模块,利用随机函数生成20个不同的浏览器,放在一个列表中:
但实际使用中,我们没有必要这样复杂,请看代码:
from urllib import request import random from fake_useragent import UserAgent ua=UserAgent()#创建对象 q=[ua.ie,ua.firefox,ua.Chrome]#定义列表 w=q[random.randint(0,2)]#随机抽取一种浏览器类型 url = 'http://httpbin.org/get' header1= {'User-Agent':w}#伪装浏览器 req = request.Request(url=url, headers=header1) res = request.urlopen(req)#发送请求 out= res.read().decode('utf-8')#提取响应内容 print(out)#输出结果
至此,完美解决伪装浏览器的问题,运行2次,得到不同的结果:
当然,这只是第一步,还有伪装IP技术,我们在后面会陆续讲到。
不过,网络爬虫作为一种计算机技术就决定了它的中立性,爬虫本身在法律上并不被禁止。
但是如果有一些别有用心的人,去使用爬虫做一些违法的事情,那就违法了。爬虫本无罪,有罪的是贪得无厌、险恶的人心。
网络爬虫界有一句流行的话“爬虫玩的好,监狱进的早;爬虫爬得欢,监狱要坐穿;数据玩的溜,公饭吃个够”。
纵观国内外,不少因为网络爬虫引发的案件,两个公司之间打官司,公司员工被抓进去等等,这些案例不胜枚举。
所以大家要有正确的心态来学习技术,而不是走歪门邪道。
你学会了吗?升职加薪好用!
还没有评论,来说两句吧...