python3学习笔记之七——爬虫之爬取qq表情金馆长

python3学习笔记之七——爬虫之爬取qq表情金馆长_第1张图片python3学习笔记之七——爬虫之爬取qq表情金馆长_第2张图片

网址:http://qq.yh31.com/zjbq/0551964.html

一看吓一跳,一共有95页

python3学习笔记之七——爬虫之爬取qq表情金馆长_第3张图片

但是每一页的url有迹可循,比如:

第二页http://qq.yh31.com/zjbq/0551964_2.html

第三页http://qq.yh31.com/zjbq/0551964_3.html

仅仅是在第一页的基础上增加了_2,_3,那就可以通过循环拼接字符串遍历所有页面。

接下来查看第一页上的图片,firefox通过右键---查看元素

python3学习笔记之七——爬虫之爬取qq表情金馆长_第4张图片

可以看到图片信息存储在一阁class='c_content_text'的下面,且标签都为img,而后面的src正是存储的图片的地址,只要获取到这个地址就能将图片下载下来。

这个时候就要用到两个库,requests和bs4,都有详细的官方中文文档:

requests:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html

beautifulsoup:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

import requests
from bs4 import BeautifulSoup

#爬取金馆长表情

url = "http://qq.yh31.com/zjbq/0551964.html"
r = requests.get( url = url)
content = r.content
#beautifulsoup解析
btu = BeautifulSoup(content, 'html.parser' )
#先找 c_content_txt
listm = btu.find( class_ = 'c_content_text' )
btu2 = BeautifulSoup( str (listm), 'html.parser' )
#再找img标签
listimg = btu2.find_all( 'img' )
#通过get('src')获得src中的内容
for i in listimg:
print (i.get( 'src' ))
可以得到图片列表:
python3学习笔记之七——爬虫之爬取qq表情金馆长_第5张图片

右键看到图片的地址为:http://qq.yh31.com/tp/zjbq/201806051900126753.jpg,就是http://qq.yh31.com,与爬取到图片地址的拼接。

完整的代码如下:

import requests
from bs4 import BeautifulSoup

#爬取金馆长表情
class getpic ( object ):
def __init__ ( self ):
self .urls = [ 'http://qq.yh31.com/zjbq/0551964.html' ] #用来存储所有页
self .target = 'http://qq.yh31.com'
self .url = 'http://qq.yh31.com/zjbq/0551964' #用来构造所有页的url


def get_urls ( self ): #获取所有页的url
for i in range ( 2 , 96 ):
tmp = self .url + '_' + str (i) + '.html'
self .urls.append(tmp)
def get_url_name ( self , url ): #获取每一页的下载地址
r = requests.get( url = url)
content = r.content
btu = BeautifulSoup(content, 'html.parser' )
listm = btu.find( class_ = 'c_content_text' )
btu2 = BeautifulSoup( str (listm), 'html.parser' )
listimg = btu2.find_all( 'img' )
print ( len (listimg))
durl = []
dname = []
for each in listimg:
durl.append( self .target + each.get( 'src' ))
dname.append(each.get( 'src' )[ 9 :]) #截取后面的图片名称作为图片的名称
return durl,dname
def download ( self , url , name ):
r = requests.get( url = url, stream = True )
with open ( 'C: \\ pic \\ %s ' % name, 'ab+' ) as f:
for chunk in r.iter_content( chunk_size = 512 ):
if chunk:
f.write(chunk)
f.flush()

if __name__ == '__main__' :
gp = getpic()
gp.get_urls()
n = 1
for i in gp.urls:
durl,dname = gp.get_url_name(i)
for j in range ( len (durl)):
gp.download(durl[j],dname[j])
print ( '正在下载第 %d 张图片' % n )
n = n + 1

python3学习笔记之七——爬虫之爬取qq表情金馆长_第6张图片

金馆长表情已经排排坐了。

python3学习笔记之七——爬虫之爬取qq表情金馆长_第7张图片


你可能感兴趣的:(python3)