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

金館長表情已經排排坐了。



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