800819103
在线客服,实时响应qq群
在线客服,实时响应客服电话
13318873961现在信息时代,想要做信息分析,首先要有大量的数据,而爬虫即是一个采集信息的好帮手,爬虫可以自动的爬取并下载大量的信息。爬虫这么有效,那么怎么快速掌握网络爬虫基础,并成功爬取信息呢?
爬虫能否成功的爬取信息,前提是你能突破目标网站的反爬虫机制,这是一个难点,如果攻克不了,是没有办法实现大量的采集。今天精灵代理跟大家分享一下网络爬虫的技术基础,希望大家可以掌握到精髓。
1.Urllib基础
打开python命令行界面,两种方法:ulropen()爬到内存,urlretrieve()爬到硬盘文件。
>>> import urllib.request#open百度,读取并爬到内存中,解码(ignore可忽略解码中的细微错误), 并赋值给data>>> data=urllib.request.ulropen("http://www.baidu.com").read().decode("utf-8”, “ignore")#判断网页内的数据是否存在,通过查看data长度>>> len(data)提取网页标题#首先导入正则表达式, .*?代表任意信息,()代表要提取括号内的内容>>> import re#正则表达式>>> pat="(.*?)"#re.compile()指编译正则表达式#re.S是模式修正符,网页信息往往包含多行内容,re.S可以消除多行影响>>> rst=re.compile(pat,re.S).findall(data)>>> print(rst)#[‘百度一下,你就知道’]
同理,只需换掉网址可爬取另一个网页内容
>>> data=urllib.request.ulropen("http://www.jd.com").read().decode("utf-8", "ignore")>>> rst=re.compile(pat,re.S).findall(data)>>> print(rst)
上面是将爬到的内容存在内存中,其实也可以存在硬盘文件中,使用urlretrieve()方法
>>> urllib.request.urlretrieve("http://www.jd.com",filename="D:/我的教学/Python/阿里云系列直播/第2次直播代码/test.html")
之后可以打开test.html,京东网页就出来了。由于存在隐藏数据,有些数据信息和图片无法显示,可以使用抓包分析进行获取。
2.浏览器伪装
尝试用上面的方法去爬取糗事百科网站url="https://www.qiushibaike.com/",会返回拒绝访问的回复,但使用浏览器却可以正常打开。那么问题肯定是出在爬虫程序上,其原因在于爬虫发送的请求头所导致。
打开糗事百科页面,通过F12,找到headers,这里主要关注用户代理User-Agent字段。User-Agent代表是用什么工具访问糗事百科网站的。不同浏览器的User-Agent值是不同的。那么就可以在爬虫程序中,将其伪装成浏览器。
将User-Agent设置为浏览器中的值,虽然urlopen()不支持请求头的添加,但是可以利用opener进行addheaders,opener是支持高级功能的管理对象。代码如下:
#浏览器伪装url="https://www.qiushibaike.com/"#构建openeropener=urllib.request.build_opener()#User-Agent设置成浏览器的值UA=("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")#将UA添加到headers中opener.addheaders=[UA]urllib.request.install_opener(opener)data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
3.用户代理池
在爬取过程中,一直用同样一个地址爬取是不可取的。如果每一次访问都是不同的用户,对方就很难进行反爬,那么用户代理池就是一种很好的反爬攻克的手段。
第一步,收集大量的用户代理User-Agent
#用户代理池uapools=[
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",
]
第二步,建立函数UA(),用于切换用户代理User-Agent
def UA():
opener=urllib.request.build_opener()
#从用户代理池中随机选择一个
thisua=random.choice(uapools)
ua=("User-Agent",thisua)
opener.addheaders=[ua]
urllib.request.install_opener(opener)
print("当前使用UA:"+str(thisua))
for循环,每访问一次切换一次UA
for i in range(0,10):
UA()
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
每爬3次换一次UA
for i in range(0,10):
if(i%3==0):
UA()
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")
怎么快速掌握网络爬虫基础?本文介绍了Urllib基础、浏览器伪装、用户代理池这三个爬虫的基础知识,掌握后,需要结合实战练习,能更快的把所掌握的知识变成自己的,可以先写出一些简单的爬虫项目,进行简单的爬取工作,然后循环渐进。
其中,对于反爬虫,可以突破的西方法比较多,比如代理IP可以突破IP限制。根据不同的反爬虫机制,进行不同的突破,才能成功的采集到大量的信息。