几乎每一个男生的第一个爬虫都是爬妹子的图片的
写代码之前要仔细分析一下网页的源码。
可以看到,图片的URL前面都有 imgclass=”BDE_Image”pic_type=”0”width=”…”height=”…”
,之后就是src =” “,里面的内容就是图片的URL,点击可以查看图片。而我们需要的就是 img class=”BDE_Image”和 src=” ” .
写代码的时候需要导入urllib和BeautifulSoup这两个模块。一开始没学BeautifulSoup的时候,还是有点犯难的。因为urllib和re这两个模块用正则匹配式来抓取,在width和height这两个属性的时候感觉下不了手(可能我不知道,我是新手,拜托各位dalao勿喷)。
#-*-coding:utf-8-*-
from bs4 import BeautifulSoup
import urllib
def get_content(url):
html = urllib.urlopen(url)
content = html.read()
html.close()
return content
def callback(a,b,c):
down_progress = a*b*100/c
if down_progress > 100:
down_progress = 100
print "%.2f%%" %down_progress,
if down_progress == 100:
print '\n'
def get_image(info):
soup = BeautifulSoup(info,"html5lib")
all_img = soup.find_all('img',class_ = "BDE_Image")
sum = 0
for img in all_img:
global i
i = sum
print '%s.jpg ' %i
urllib.urlretrieve(img['src'],
"E:\\Picture\\%s.jpg" %i,callback)
sum += 1
url = 'https://tieba.baidu.com/p/3697059303'
info = get_content(url)
get_image(info)
这是源码,加了一个显示下载进度的小功能。
def get_content(url):
html = urllib.urlopen(url)
content = html.read()
html.close()
return content
这个函数是读取传入的url,将网页的源代码读取进来
def callback(a,b,c):
down_progress = a*b*100/c
if down_progress > 100:
down_progress = 100
print "%.2f%%" %down_progress,
if down_progress == 100:
print '\n'
这个函数是实现下载进度的,要传入三个参数。下载时数据被分为几个数据块,a是当前数据块的第几个数,b是每个数据块的大小,c是总数据块的大小。down_progress是下载进度,当大于100%的时候就要使它等于100%。
上面就是下载一个网页时a,b,c的数据。
def get_image(info):
soup = BeautifulSoup(info,"html5lib")
all_img = soup.find_all('img',class_ = "BDE_Image")
sum = 0
for img in all_img:
i = sum
print '%s.jpg ' %i
urllib.urlretrieve(img['src'],
"E:\\Picture\\%s.jpg" %i,callback)
sum += 1
soup= BeautifulSoup(info,”html5lib”),这句代码就是把一个Beautifuls对象实例化,然后传入info(html的头部信息)和html5lib解释器(这个BeautifulSoup的帮助文档上有)。之前我看教程的时候他没有传入html5lib解释器,后来百度才知道,但是很奇怪教程能够运行,但我却报错了,估计是版本问题吧。
all_img = soup.find_all(‘img’,class_ = “BDE_Image”),这句代码就是调用soup.fing_all方法,查找所有的传入的正则,然后返回