先来例程:
正则表达式法:(不推荐)
[python] view plain copy
# -- coding: utf-8 --
"""
Created on Thu Jun 1 16:22:10 2017
@author: qiu
"""
import urllib
import re
下载网页
def get_content(url):
'''''
@url:需要下载的网址
下载网址
'''
html = urllib.request.urlopen(url)
content = html.read().decode('utf-8')#转码
html.close()#记得要将打开的网页关闭,否则会出现意想不到的问题
print (type(content))
return content
print (get_content(url))
def get_image(info):
'''''
@info:网页信息
查看下载内容的编码格式
width="560" height="315" changedsize="true">
利用正则表达式学习样式规则
下载图片
'''
#正则表达式写法是重点
regx = r'pic_type="0" class="BDE_Image" src="(.+?\.jpg)"'
pat = re.compile(regx)
image_code = re.findall(pat,info)
print(type(image_code))
#一个一个保存
i=1
for image_url in image_code:
print(image_url)
urllib.request.urlretrieve(image_url,"C:\\Users\\qiu\\Desktop\\python源\\桌面图片\\%s.jpg"%(i))
i+=1
url = "https://tieba.baidu.com/p/2218566379"
info = get_content(url)
get_image(info)
BeautifulSoup法:
[python] view plain copy
# -- coding: utf-8 --
"""
Created on Thu Jun 1 19:38:11 2017
@author: qiu
"""
import urllib
from bs4 import BeautifulSoup
beautifulsoup方法,第三方库的方法,爬找网页
下载网页
def get_content(url):
'''''
@url:需要下载的网址
下载网址
'''
html = urllib.request.urlopen(url)
content = html.read().decode('utf-8')#转码
html.close()#记得要将打开的网页关闭,否则会出现意想不到的问题
print (type(content))
return content
def get_image(info):
'''''
利用Soup第三方库实现抓取
'''
soup = BeautifulSoup(info,"lxml")#设置解析器为“lxml”
all_image = soup.find_all('img',class_ = "BDE_Image")
x=1
for image in all_image:
print(all_image)
urllib.request.urlretrieve(image['src'],"C:\\Users\\qiu\\Desktop\\python源\\桌面图片\\%s.jpg"%(x))
x+=1
url = "https://tieba.baidu.com/p/2218566379"
info = get_content(url)
print (info)
get_image(info)
总结:
1、首先熟悉网页编程,至少能知道图片对应程序中的位置,将所需要的图片的程序内容单独拿出来,并比较和其他噪声图片的区别,包括class,pic_type等,能够保证所需下载内容程序书写上的唯一性。
2、利用"re"正则表达式或者all_image = soup.find_all('img',class_ = "") 方法实现唯一化表达
3、一些技巧总结:print (type( ))利用查看返回值类型,列表?字典?对象?等,如果是class,一定有方法,利用print (dir( )) 查看对象的方法。或者直接看官网文档。
问题:
1、一些动态网页需要另外技巧了,例如百度图片(康复机械臂)上的图片如何下载,是另外一个需要解决的问题。
更好的方法:scrapy(爬虫框架)
不过安装有点麻烦,当然我还是pip法:库