python抓取动态网页(如下,常用爬虫制作模块的基本用法极度推荐!)

优采云 发布时间: 2021-11-14 11:04

  python抓取动态网页(如下,常用爬虫制作模块的基本用法极度推荐!)

  本文章主要介绍了使用Python的urllib和urllib2模块制作爬虫的示例教程,展示了这两个常用的爬虫制作模块的基本用法。强烈推荐!有需要的朋友可以参考

  网址库

  在学习了python的基础知识后,我有点困惑。当我闭上眼睛时,一种空白的窒息感不断袭来。我还缺乏练习,所以我拿着履带练习我的手。学习了Spartan python爬虫课程后,我将自己的经验整理如下,供后续看。整个笔记主要分为以下几个部分:

  1.做一个简单的爬虫

  第一个环境描述

  这个没什么好说的,直接上代码吧!

   ''' @ urllib为python自带的一个网络库 @ urlopen为urllib的一个方法,用于打开一个连接并抓取网页, 然后通过read()方法把值赋给read() ''' import urllib url = "http://www.lifevc.com"#多嘴两句,为什么要选lifevc呢,主要是最近它很惹我. html = urllib.urlopen(url) content = html.read() html.close() #可以通过print打印出网页内容 print content

  很简单,基本没什么好说的,这就是python的魅力,几行代码就可以完成。

  当然,我们只是爬网,并没有真正的价值。然后我们将开始做一些有意义的事情。

  2.一个小测试

  抢*敏*感*词*图片

  其实很简单,因为要抓取图片,首先要分析网页的源代码。

  (这里是了解基本的html知识,浏览器以chrome为例)

  如图,这里是对后续步骤的简要说明,请参考。

  打开网页,右键单击并选择“检查元素”(底部项目)

  点击下方弹出框最左边的问号,问号会变成蓝色

  移动鼠标点击我们要捕捉的图片(一个可爱的女孩)

  如图,我们可以在源码中获取图片的位置

  

  复制下面的源代码

  

  经过分析对比(这里略略),基本上可以看到要抓拍的图像的几个特征:

  正则表达式稍后更新,请注意

  根据上面的判断,直接上传代码

   ''' @本程序用来下载*敏*感*词*图片 @re 为正则说明库 ''' import urllib import re # 获取网页html信息 url = "http://tieba.baidu.com/p/2336739808" html = urllib.urlopen(url) content = html.read() html.close() # 通过正则匹配图片特征,并获取图片链接 img_tag = re.compile(r'class="BDE_Image" src="(.+?\.jpg-600)"') img_links = re.findall(img_tag, content) # 下载图片 img_counter为图片计数器(文件名) img_counter = 0 for img_link in img_links: img_name = '%s.jpg-600' % img_counter urllib.urlretrieve(img_link, "//Users//Sean//Downloads//tieba//%s" %img_name) img_counter += 1

  如图所示,我们将抓取您理解的图片

  

  3.总结

  如上两节,我们可以轻松访问网页或图片。

  补充一点小技巧,如果遇到不是很清楚的库或者方法,可以使用下面的方法来初步了解一下。

  或输入相关搜索。

  当然,百度也是可以的,只是效率太低了。建议使用相关搜索(你懂的,绝对满意)。

  这里我们讲解如何抓取网页和下载图片,下面我们将讲解如何在有限抓取的情况下抓取网站。

  urllib2

  上面我们讲解了如何抓取网页和下载图片,下一节我们将讲解如何抓取受限抓取网站

  首先,我们还是用上一课的方法,抓取一个大家用的网站作为例子。本文主要分为以下几个部分:

  1. 抓取受限网页

  首先使用我们在上一节中学到的知识进行测试:

   ''' @本程序用来抓取blog.csdn.net网页 ''' import urllib url = "http://blog.csdn.net/FansUnion" html = urllib.urlopen(url) #getcode()方法为返回Http状态码 print html.getcode() html.close() #输出

   403

  这里我们的输出是 403,这意味着访问被拒绝;同样,200 表示请求成功完成;404 表示未找到该 URL。

  可以看出csdn已经被屏蔽了。第一部分的方法无法获取网页。这里我们需要启动一个新的库:​​urllib2

  但是我们也看到浏览器可以发布该文本。我们可以模拟浏览器操作来获取网页信息吗?

  老办法,我们来看看浏览器是如何向csdn服务器提交请求的。首先简单介绍一下方法:

  

  以下是整理后的头部信息

   Request Method:GET Host:blog.csdn.net Referer:http://blog.csdn.net/?ref=toolbar_logo User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36

  然后根据提取的Header信息,使用urllib2的Request方法模拟浏览器向服务器提交请求。代码如下:

   # coding=utf-8 ''' @本程序用来抓取受限网页(blog.csdn.net) @User-Agent:客户端浏览器版本 @Host:服务器地址 @Referer:跳转地址 @GET:请求方法为GET ''' import urllib2 url = "http://blog.csdn.net/FansUnion" #定制自定义Header,模拟浏览器向服务器提交请求 req = urllib2.Request(url) req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36') req.add_header('Host', 'blog.csdn.net') req.add_header('Referer', 'http://blog.csdn.net') req.add_header('GET', url) #下载网页html并打印 html = urllib2.urlopen(req) content = html.read() print content html.close()

  哈哈,如果你限制我,我就跳过你的限制。据说只要浏览器可以访问,就可以被爬虫抓取。

  2. 对代码的一些优化

  简化提交头方法

  发现每次写这么多req.add_header对自己来说都是一种折磨。有什么办法可以复制并使用它吗?答案是肯定的。

   #input: help(urllib2.Request) #output(因篇幅关系,只取__init__方法) __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False) 通过观察,我们发现headers={},就是说可以以字典的方式提交header信息.那就动手试试咯!! #只取自定义Header部分代码 csdn_headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36", "Host": "blog.csdn.net", 'Referer': 'http://blog.csdn.net', "GET": url } req = urllib2.Request(url,headers=csdn_headers)

  很容易找到,我要感谢斯巴达的无私教导。

  提供动态头信息

  如果按照上面的方法进行爬取,很多时候提交的信息会过于单一,会被服务器当成机器爬虫拒绝。

  那么我们是否有一些更聪明的方法来提交一些动态数据?答案是肯定的。而且很简单,直接上代码!

   ''' @本程序是用来动态提交Header信息 @random 动态库,详情请参考 ''' # coding=utf-8 import urllib2 import random url = 'http://www.lifevc.com/' my_headers = [ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; InfoPath.1', 'Mozilla/4.0 (compatible; GoogleToolbar 5.0.2124.2070; Windows 6.0; MSIE 8.0.6001.18241)', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; Sleipnir/2.9.8)', #因篇幅关系,此处省略N条 ] random_header = random.choice(headers) # 可以通过print random_header查看提交的header信息 req = urllib2.Request(url) req.add_header("User-Agent", random_header) req.add_header('Host', 'blog.csdn.net') req.add_header('Referer', 'http://blog.csdn.net') req.add_header('GET', url) content = urllib2.urlopen(req).read() print content

  其实很简单,所以我们就完成了代码的一些优化。

  以上就是使用Python的urllib和urllib2模块制作爬虫示例教程的详细内容。更多详情请关注其他相关html中文网站文章!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线