使用BeautifulSoup去爬取豆瓣图片

#要安装bs4和request,用pip install
from bs4 import BeautifulSoup
import requests
#用request下载网页图片
import urllib.request

#放在函数定义
x = 0
#获取豆瓣图片
#参数赋值可以不写,也可以传个默认值1,但不能写i变量,因为这时i还没定义,两个变量相等是不行的
def  getDbImage(page = 1):
    #x = 0
    #获取网页源代码
    #https://www.dbmeinv.com/?pager_offset=3
    response = requests.get('https://www.dbmeinv.com/?pager_offset={}'.format(page))
    html = response.text
    #返回200,说明请求成功
    #print(response)
    #创建对象   用解释器解释网页    也可以用lxml等
    soup = BeautifulSoup(html,'html.parser')
    #找到所有的img标签,这个网页只有我们要的照片有img标签,要看网页情况
    girl = soup.find_all('img')
    #获得所有img标签,这是个列表,可以循环
    #print(girl)
    #循环列表得到每一个标签
    for img in girl:
        #print(img)
        #获得所有的链接
        link = img.get('src')
        #print(link)
        #x定义在函数内则不需要global,但每次循环x都会变回0,不利于文件命名,在这里定义成全局变量
        global x
        #下载图片,也可以用open,现在换个方法,urlretrieve(检索)第一个参数为链接,第二个参数是保存路径,images文件夹下,后面是文件名
        urllib.request.urlretrieve(link,'images/%s.jpg'%x)
        #每次循环修改文件名,每次递增1,
        x += 1
        #做个提示
        print('正在下载第%s张图片'%x)
    
#获取范围页数,比如前10页
for i in range(1,11):
    print("正在下载第{}页图片".format(i))
    #现在对比下网页翻页变化,可以发现后面那个4可以更改为变量
    #https://www.dbmeinv.com/?pager_offset=3
    #https://www.dbmeinv.com/?pager_offset=4
    getDbImage(i)
    #函数需要变量接受i

除去注释后简约版代码:

from bs4 import BeautifulSoup
import requests
import urllib.request

x = 0
def  getDbImage(page = 1):
    response = requests.get('https://www.dbmeinv.com/?pager_offset={}'.format(page))
    html = response.text
    soup = BeautifulSoup(html,'html.parser')
    girl = soup.find_all('img')
    for img in girl:
        link = img.get('src')
        global x
        urllib.request.urlretrieve(link,'images/%s.jpg'%x)
        x += 1
        print('正在下载第%s张图片'%x)
    
for i in range(1,11):
    print("正在下载第{}页图片".format(i))
    getDbImage(i)

效果如下:

猜你喜欢

转载自www.cnblogs.com/LifeIsHardIUsePyhon/p/9076048.html