python爬虫(简单版)
学过python的帅哥都知道,爬虫是python的非常好玩的东西,而且python自带urllib、urllib2、requests等的库,为爬虫的开发提供大大的方便。
这次我要用urllib2,爬一堆风景图片。
先上重点代码
1 response = urllib2.urlopen(url).read() 2 soup = BeautifulSoup( 3 response, # html字符串 4 'html.parser', # html解析器 5 from_encoding='utf-8' # 字符编码 6 )
其中,urlopen就顾名思义了,可以简单理解为打开一个url,然后获得该URL相对应的东西在python里的对象,然后通过read之后,就得到了页面的所有构成元素了
1 if __name__=='__main__': 2 s = urllib2.urlopen('http://www.baidu.com/') 3 print(s.read(100))
read可以传参数,在这里是读取100个字符,结果如下:
然后上面重点代码里的soup是一个BeautifulSoup对象,是一个第三方的用于html页面内容解析的库,当创建了一个BeautifulSoup对象之后,就可以用这个对象对html的内容进行解析,比如:
1 attr = { 2 'class':'pic', 3 } 4 nodes = soup.find_all('a',attr)
find_all()函数是查找所有符合参数条件的元素,上面的代码就是查找所有类名为pic的a元素,除了find_all之外,还有一个find元素,是查找符合条件的第一个元素,知道这两个函数之后,已经可以爬东西了。
import urllib2 from bs4 import BeautifulSoup def spider_image(url,pre_filename): response = urllib2.urlopen(url).read() soup = BeautifulSoup( response, # html字符串 'html.parser', # html解析器 from_encoding='utf-8' # 字符编码 ) attr = { 'class':'pic', # 'page':'2' } nodes = soup.find_all('a',attr) url_list = set() for node in nodes: try: url_list.add(node['href']) except: pass for url in url_list: img_html = urllib2.urlopen(url).read() soup = BeautifulSoup( img_html, # html字符串 'html.parser', # html解析器 from_encoding='utf-8' # 字符编码 ) img_url = soup.find('img',id="imgView") img_name = img_url['alt'] try: img = urllib2.urlopen(img_url['src']).read() print(u'正在下载图片:'+img_name) fout = open(pre_filename+img_name+'.jpg','wb') fout.write(img) fout.close() except Exception as e: print(e) pass def mkdir(path): # 引入模块 import os # 去除首位空格 path=path.strip() # 去除尾部 \ 符号 path=path.rstrip("\\") # 判断路径是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判断结果 if not isExists: # 如果不存在则创建目录 print path+' 创建成功' # 创建目录操作函数 os.makedirs(path) return True else: # 如果目录存在则不创建,并提示目录已存在 print path+' 目录已存在' return False if __name__=='__main__': url_list = [ 'http://www.tooopen.com/img/90_894.aspx' ] i = 1 for url in url_list: print(u'现在开始下载第'+str(i)+u'个网站的图片') # 定义要创建的目录 mkpath='F:\\spider'+str(i) # 调用函数 mkdir(mkpath) spider_image(url,'F://spider//spider_image'+str(i)+'//') i = i + 1
爬图片的话,其实就是读取到图片之后,转成二进制数据之后,写入文件就行了,然后运行就可以了,然后就看到一堆图片在目录里
当然,这算是最基础,什么情况都没遇到,超顺利,随着你想爬更多东西,会发现有很多反爬虫的东西,比如cookie,验证码,ajax动态加载之类的,遇到这些东西,要爬的话,需要做更多更多的工作,当然,这么好玩的东西,做再多工作都是值得的。