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

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

一看吓一跳,一共有95页

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

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

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

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

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


可以看到图片信息存储在一阁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'))
可以得到图片列表:

右键看到图片的地址为: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

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章