爬虫学习一系列:urllib2抓取网页内容php
所谓网页抓取,就是把URL地址中指定的网络资源从网络中读取出来,保存到本地。咱们平时在浏览器中经过网址浏览网页,只不过咱们看到的是解析过的页面效果,而经过程序获取的则是程序源代码。咱们经过使用Python中urllib2来获取网页的URL资源,最简单方法就是调用urlopen 方法。html
1 # coding : utf-8 2 import urllib2 3 import urllib 4 5 url = 'http://www.baidu.com' 6 res = urllib2.urlopen(url) 7 print res.read()
HTTP是基于请求和应答机制—客户端提出请求,服务端提供应答。正则表达式
urllib2用一个Request对象来映射你提出的HTTP请求,经过调用urlopen来传入Request对象,将返回一个相关请求response对象,这个应答对象如同一个文件对象,因此咱们能够在Response对象中调用read()方法来读取。浏览器
1 # coding : utf-8 2 import urllib2 3 import urllib 4 5 url = 'http://www.baidu.com' 6 request = urllib2.Request(url) 7 res = urllib2.urlopen(request) 8 print res.read()
在HTTP请求时,咱们还能够发送data表单数据。通常的HTML表单,data须要编码成标准造成,而后做为data参数传到Request对象。而相应的编码工做就不能用urllib2来完成了,而是咱们urllib组件。网络
1 import urllib 2 import urllib2 3 4 url = 'http://www.someserver.com/register.cgi' 5 6 values = {'name' : 'BaiYiShaoNian', 7 'localtion' : 'ChongQing', 8 'language' : 'Python', 9 } 10 11 data = urllib.urlencode(values) 12 req = urllib2.Request(url,data) 13 response = urllib2.urlopen(req) 14 the_page = response.read() 15 16 print the_page
可是我有一个疑问:就是这一份代码并不能运行,我还不知道传入数据表单的做用是什么,或者咱们在抓cnblogs页面时,传入登陆的信息,是否是咱们就能够登陆博客园了啊,因此在这里请教一下大牛,先感谢了。学习
正则表达式,又称为正则表示法、常规表示法。正则表达式使用单个字符串来描述、匹配一系列符号某个句法规则的字符串。通俗的说,正则表达式就是在程序中定义了字符串的某种规则,而后咱们在网页源代码中找出符合这种规则的全部代码语句,不符合的就淘汰不要。编码
关于正则表达式的不少具体用法,我后面会边学边为你们讲解的,这里先略过。url
咱们能够经过Python爬虫来获取如下网页中新闻标题和新闻的ID。spa
1 # -*- coding: utf-8 -*- 2 import urllib2 3 import re 4 5 # 1.获取访问页面的HMTL 6 url = "http://www.nenu.edu.cn/newslist.php?cid=1" 7 8 response = urllib2.urlopen(url) 9 html = response.read() 10 # 2.根据正则表达式抓取特定内容 11 r = re.compile(r'<a href="intramural/content/news/(?P<ID>.{5}).*" target="_blank">(?P<Title>.+)</a>') 12 news = r.findall(html) 13 for i in range(len(news)): 14 ID = news[i][0] 15 title = news[i][1] 16 # data = data.decode('utf-8') 17 # title = title.decode('utf-8') 18 print title + " " + ID + " "
咱们运行这一份代码看看结果是什么样的,是否已经成功获取。