Python新手爬虫二:爬取搜狗图片(动态)
程序员文章站
2022-04-16 07:58:36
经过上一期爬取豆瓣影评成功后,感觉爬虫还不错,于是想爬点图片来玩玩... 搜狗图片地址:https://pic.sogou.com/?from=category 先上最后成功的源码: import requests import urllib import json from fake_userag ......
经过上一期爬取豆瓣影评成功后,感觉爬虫还不错,于是想爬点图片来玩玩...
搜狗图片地址:
先上最后成功的源码:
import requests import urllib import json from fake_useragent import useragent def getsougouimag(category,length,path): n = length cate = category imgs_url = [] #定义空列表,用于保存图片url m = 0 #用于显示图片数量 url = 'https://pic.sogou.com/pics/channel/getallrecompicbytag.jsp?category='+cate+'&tag=%e5%85%a8%e9%83%a8&start=0&len='+str(n) headers = {'user-agent':useragent().random} #设置ua f = requests.get(url,headers=headers) #发送get请求 print(f.status_code) js = json.loads(f.text) js = js['all_items'] for j in js: imgs_url.append(j['thumburl']) for img_url in imgs_url: print('***** '+str(m)+'.jpg *****'+' downloading...') urllib.request.urlretrieve(img_url,path+str(m)+'.jpg') #下载指定url到本地 m += 1 print('download complete!') getsougouimag('壁纸',500,r'd:\sougouimg/')
效果图:
下面开始介绍作为一个新手的爬虫步骤...
1、首先打开网页查看html源码
先按f12打开调试界面—>右击图片—>点击检查
会出现如下图红框中的信息,不难看出,此图片的url就是img标签中src属性的值。
如此简单?那直接获取src属性的值,再进行下载不就完全ok了?
话不多说,开干。
from bs4 import beautifulsoup import requests from fake_useragent import useragent #ua库 url = 'https://pic.sogou.com/pics/recommend?category=%b1%da%d6%bd&from=home#%e5%85%a8%e9%83%a8%269' headers = {'user-agent':useragent().random} #设置ua f = requests.get(url,headers=headers) #发送get请求 print(f.status_code) #打印状态码 soup = beautifulsoup(f.text,'lxml') #用lxml解析器解析该网页的内容 print(soup.select('img')) #筛选出所有img的标签,并打印其属性和内容
代码执行结果如下:
发现打印出的html并不是与网页中的一致,所有考虑,这根本不是图片的源url,于是推测图片是动态的,继续查找... 也是百度到了某个大佬的文章,才挖掘出以下搜寻方法。
2、点击network—>点击xhr—>然后往下滚轮,使它加载出新的图片—>点击新加载出来的图片—>再点击右侧的preview
发现preview下的内容为json格式的
发现all_items,点击它发现有0.....众多数字,再点开发现有许多url,粘贴到浏览器中查看,发现这些都是图片的url(心中狂喜)
找到图片的真实url,问题也就变得简单了。详情还是请看代码注释吧~