抓取jsp网页源代码( 斯巴达,常用爬虫制作模块的基本用法极度推荐!)
优采云 发布时间: 2021-12-26 08:05抓取jsp网页源代码(
斯巴达,常用爬虫制作模块的基本用法极度推荐!)
使用Python的urllib和urllib2模块制作爬虫示例教程
更新时间:2016-01-20 10:25:51 作者:小璐D
本文主要介绍了使用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为例)
如图,这里是对后续步骤的简要说明,请参考。
打开网页,右键单击并选择“检查元素”(底部项目)
点击下方弹出框最左边的问号,问号会变成蓝色
移动鼠标点击我们要捕捉的图片(一个可爱的女孩)
如图,我们可以在源码中获取图片的位置
复制下面的源代码
sign=3d5aacaab21c8701d6b6b2ee177e9e6e/17a6d439b6003af329aece2e342ac65c1138b6d8.
jpg" />
经过分析对比(这里略略),基本上可以看到要抓拍的图像的特征:
以后我会更新正则表达式,请大家注意
根据上面的判断,直接上传代码
'''
@本程序用来下载*敏*感*词*图片
@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)"')
img_links = re.findall(img_tag, content)
# 下载图片 img_counter为图片计数器(文件名)
img_counter = 0
for img_link in img_links:
img_name = '%s.jpg' % 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
其实很简单,所以我们就完成了代码的一些优化。