

网址: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

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