python 抓取页面图片并保存到本地

1 直接上代码了 下面再做说明
今天就拿抓取这个页面的这块的图片为例
https://sc.chinaz.com/tupian/beijingtupian_2.html
在这里插入图片描述

#分页下载所有的图片 完整例子 参考文档 https://blog.csdn.net/Monster_No17/article/details/106277822
import requests,lxml,re             #发出请求
from bs4 import BeautifulSoup as  Bs #需安装 BeautifulSoup4
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
}
for j in  range(2,4): #j的取值范围2 3 range(i)表示生成从0到i-1的整数序列
    url = 'http://sc.chinaz.com/tupian/beijingtupian_{}.html'.format(j)
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
    }
    response = requests.get(url=url,headers=headers).text
    #requests.get(url=url,headers=headers).encoding ISO-8859-1 网页编码
    #print(response)
    #避免字符乱码
    response = response.encode('ISO-8859-1')
    response = response.decode('utf-8','ignore')
    sourcehtml = Bs(response,'lxml')
    #返回list对象
    #imagehtml = sourcehtml.find_all("img",src=re.compile('static/common/com_images/'),alt=re.compile('图片'))
    #find_all( name , attrs/class_ , recursive , string , **kwargs ) 或者可以这么写
    imagehtml = sourcehtml.find_all("img", attrs={'src':re.compile('static/common/com_images/'),'class':'lazy'}, alt=re.compile('图片'))
    for i in imagehtml:
        imgsrc = i.get('src')
        alt = i.get('alt')
        data_original = i.get('data-original')
        #i.get('alt')[0:-2]) 情人节玫瑰花梦幻背景图片 截取结果 情人节玫瑰花梦幻背景
        #保存图片
        with open('D:\\testpy\\背景图\\{}.jpg'.format(i.get('alt')[0:-2]), 'wb') as fd:
            ima = requests.get('https:' + data_original).content  # 此处注意缩进
            fd.write(ima)

根据需求下载指定页码的图片 最终会在指定的本地目录得到下载的图片
在这里插入图片描述

2 下面就find_all做语法做一些备注
find_all( name , attrs/class_ , recursive , string , **kwargs )
1> name标签名搜索
find_all(“title”)
find_all(name=[‘div’,‘span’])
2> 基于标签的属性查找id\class_\attrs…
通过标签属性查找的方式适用大多数标签属性,包括id,style,title,但有 “-”,Class标签属性例外。详解如下:
2.1> 通用方式属性搜索——attrs
比如html5标签中的data-custom属性,如果我们这样
soup.find(data-custom=“custom”)#错误写法
解决办法是在attrs属性用字典进行传递参数:
soup.find(attrs={‘data-custom’:‘custom’})
2.2> class名搜索----- class_
通过 class_ 参数搜索有指定CSS类名的tag(可简写):
soup.find_all(“a”, “sister”) #class_=“sister”
tag的 class 属性是 多值属性 .按照CSS类名搜索tag时,可以分别搜索tag中的每个CSS类名:
例如


在这里插入图片描述
在这里插入图片描述
css_soup = BeautifulSoup(‘

’)
css_soup.find_all(“p”, class_=“strikeout”)
css_soup.find_all(“p”, class_=“body”)
搜索 class 属性时也可以通过CSS值完全匹配:
css_soup.find_all(“p”, class_=“body strikeout”)
3> 文档字符串内容搜索——string
soup.find_all(string=[“Tillie”, “Elsie”, “Lacie”])
# [u’Elsie’, u’Lacie’, u’Tillie’]
soup.find_all(string=re.compile(“Dormouse”))
[u"The Dormouse’s story", u"The Dormouse’s story"]
string 还可以与其它参数混合使用来过滤tag.
下面代码用来搜索内容里面包含“Elsie”的标签
soup.find_all(“a”, string=“Elsie”)
# [ Elsie]
4> 限定直接子节点——recursive
调用tag的 find_all() 方法时,Beautiful Soup会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False
备注soup.find_all(“a”) 等同于soup(“a”)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值