1.说明
因为https://desk.zol.com.cn/fengjing/恰好为静态网页,requests返回的东西有我们想要的东西,所以用最基础的正则表达式来爬取图片并保存。
2.分析html
我们要提取图片的名称,图片链接,图片的上映日期。
我们可以发现,每个图片的信息都在<li class="photo-list-padding">
开头的标签节点内,我们可以根据这个开头,中间多余部分用.*?
抓取,要爬取的部分用(.*?)
来抓取
<li class="photo-list-padding">
<a class="pic" href="/bizhi/9611_116395_2.html" target="_blank" onclick="zol_niux_tongji('desk_list_firstpic')" hidefocus="true">
<img width="208px" height="130px" alt="一组超美的自然和风光图片壁纸" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/0D/02/ChMkKmBdVRiIK7LEAE_CB2CYD80AAMGwgNaucgAT8If023.jpg"
title = "一组超美的自然和风光图片壁纸"/>
<span title="一组超美的自然和风光图片壁纸">
<em>一组超美的自然和风光图片</em> (8张)</span></a><div class="shadow"></div><ins>2021-03-26</ins>
3.正则表达式
class="photo-list-.*?src="(.*?)"\stitle\s=\s"(.*?)".*?<ins>(.*?)</ins>
4.代码
import requests
import re
def get_html(url):
headers = {
'user-agent': 'Mozilla/5.0 (MSIE 10.0; Windows NT 6.1; Trident/5.0)'
}
html = requests.get(url,headers=headers)
html.encoding = 'gbk'
return html.text
def get_NOno(html):
str1 = re.compile('class="photo-list-.*?src="(.*?)"\stitle\s=\s"(.*?)".*?<ins>(.*?)</ins>',re.S)
items = re.findall(str1,html)
return items
def main():
url = 'https://desk.zol.com.cn/fengjing/'
html = get_html(url)
c = get_NOno(html)
for (i,x) in zip(c,range(1,21)):
print(i[0])
picture = requests.get(i[0])
f = open(r"D:\\Picture\fengjing" + str(x) + ".png" , 'wb')
f.write(picture.content)
f.close()
main()