带你走进 @ 机器人时代
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技术 ,我们在后面会陆续讲到。
不过, 网络爬虫 作为一种计算机技术就决定了它的中立性,爬虫本身在法律上并不被禁止。
但是如果有一些别有用心的人,去使用爬虫做一些违法的事情,那就违法了。爬虫本无罪,有罪的是贪得无厌、险恶的人心。
网络爬虫界有一句流行的话“ 爬虫玩的好,监狱进的早;爬虫爬得欢,监狱要坐穿;数据玩的溜,公饭吃个够 ”。
纵观国内外,不少因为网络爬虫引发的案件,两个公司之间打官司,公司员工被抓进去等等,这些案例不胜枚举。
所以大家要有正确的心态来学习技术,而不是走歪门邪道。
你学会了吗? 升职加薪好用!