您的位置:新闻资讯 >文章内容
怎么快速掌握网络爬虫基础,实现大量信息爬取
来源:mongolguier 作者:admin 时间:2018-12-07 15:08:21

现在信息时代,想要做信息分析,首先要有大量的数据,而爬虫即是一个采集信息的好帮手,爬虫可以自动的爬取并下载大量的信息。爬虫这么有效,那么怎么快速掌握网络爬虫基础,并成功爬取信息呢?


爬虫能否成功的爬取信息,前提是你能突破目标网站的反爬虫机制,这是一个难点,如果攻克不了,是没有办法实现大量的采集。今天精灵代理跟大家分享一下网络爬虫的技术基础,希望大家可以掌握到精髓。


怎么快速掌握网络爬虫基础,实现大量信息爬取


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限制。根据不同的反爬虫机制,进行不同的突破,才能成功的采集到大量的信息。


相关文章内容简介
在线咨询
微信公众号

微信公众号

回到顶部