模块:
(1)url管理器:对url进行管理
(2)网页下载器(urllib2):将需要爬取的url指定的网页以字符串的形式下载下来
(3)网页解释器(BeautifulSoup):解析
利用urllib2下载网页的方法:
方法1:
import urllib2,cookielib url = 'http://www.baidu.com' #定义url res1 = urllib2.urlopen(url) #请求url print res1.getcode() #获取动态码 print len(res1.read()) #获取内容
方法2:
#伪装成浏览器 import urllib2,cookielib url = 'http://www.baidu.com' request = urllib2.Request(url) request.add_header('User-Agent','Mozilla/5.0') #添加http的header,伪装成浏览器 res2 = urllib2.urlopen(request) #发送请求获取结果 print res2.getcode() print len(res2.read())
方法3:
#添加特殊情景的处理器。例如需要登录cookie、代理proxy、https、网页自动跳转或者互相志向等网页
#处理cookie实例
import urllib2 import cookielib url = 'http://www.baidu.com' cj = cookielib.CookieJar() #创建cookie容器 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #创建一个opener urllib2.install_opener(opener) #给urllib2安装opener res3 = urllib2.urlopen(url) #发送请求获取结果 print res3.getcode() print len(res3.read()) print cj
网页解释器种类:
(1)正则表达式
(2)html.parser
(3)BeautifulSoup:第三方包
(4)lxml
BeautifulSoup语法:
(1)创建bs对象
(2)搜索节点find_all,find(搜索第一个节点)
搜索内容包括:节点名字,节点属性,节点内容
例如:<a href='123.html' class='article_link'>hello,python!</a>
节点名字:a
节点属性:href='123.html' 或 class='article_link'
节点内容:hello,python!
(3)访问节点
from bs4 import BeautifulSoup html_doc = ''' <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>页面1</title> </head> <body> <a href='http://www.baidu.com'>百度</a> <a href='http://www.youku.com'>优酷</a> <a href='http://www.hao123.com'>hao123</a> </body> </html> ''' soup = BeautifulSoup(html_doc,'html.parser',from_encoding='utf-8') print '获取所有链接:' links = soup.find_all('a') for link in links: print link.name,link['href'],link.get_text() print '只获取百度的链接:' link_node = soup.find('a',href='http://www.baidu.com') print link_node.name,link_node['href'],link_node.get_text()
输出结果:
获取所有链接: a http://www.baidu.com 百度 a http://www.youku.com 优酷 a http://www.hao123.com hao123 获取百度的链接: a http://www.baidu.com 百度 正则表达式匹配 a http://www.baidu.com 百度