用Python爬取百度表情包
程序员文章站
2022-07-04 20:54:36
【小盐巴学习笔记】—用Python爬取城市名目录前言第一次先整点简单的!! 涨涨信心一、爬虫分析首先看看今天要爬取的网址https://www.aqistudy.cn/historydata/...
前言
第一次先整点简单的!! 涨涨信心
一、爬虫分析
首先看看今天要爬取的表情包网址
https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1605756395606_R&pv=&ic=&nc=1&z=&hd=&latest=©right=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&sid=&word=%E6%B2%99%E9%9B%95%E8%A1%A8%E6%83%85%E5%8C%85
1.分析网址
首先判断网址是动态网址还是静态网址,静态网址就是直接能从这串网址里找到页码
然后往下翻往下翻,发现网页是下滑加载表情图片的方式,而加载更多图片后上面网址纹丝不动
这不就是妥妥的动态加载了嘛!
2.分析数据
打开F12,根据123步骤依次点击network->XHR->重新加载数据
一直往下翻,看右侧数据变化
发现多了一排看起来一样的东西,应该就是我们的图片网址了,不确定先可以打开2处的网址瞅一眼
现在把几个链接的网址都复制到word找规律
这个pn应该就是页码,可以看出每一页都增加了30,那么第一页应该是0,第二页30,第三页60…
二、完整代码
终于做好了前期准备工作,可以搞事啦!
附上完整代码和详细注释
import requests
import re
import os
# 文件夹不存在就新建一个
dirName='image'
if not os.path.exists(dirName):
os.mkdir(dirName)
def getData(page):
# 获取网址
url='https://image.baidu.com/search/acjson?tn=resultjson_com&logid=7812402730072952517&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E6%B2%99%E9%9B%95%E8%A1%A8%E6%83%85%E5%8C%85&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word=%E6%B2%99%E9%9B%95%E8%A1%A8%E6%83%85%E5%8C%85&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&pn={}&rn=30&gsm=5a&1605831983508='.format(page)
# 设置Headers信息,模拟成浏览器访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.36'}
# 解析数据,这里用的是正则
page_text=requests.get(url=url,headers=headers).text
ex='"thumbURL":"(.*?)"'
data=re.findall(ex,page_text)
# 保存数据
for i in data:
# 解析每一页图片网址
img_data=requests.get(url=i,headers=headers).content
# 以图片地址后缀作为图片名
img_name=i.split('/')[-1]
# 保存图片
with open(dirName+'/'+img_name,mode='wb') as f:
f.write(img_data)
if __name__ == "__main__":
# 爬取前3页
for i in range(0,90,30):
getData(i)
运行效果如下:
总结
爬取动态数据还是要靠多练。
本文地址:https://blog.csdn.net/qq_45459248/article/details/109803834