举出的三个点,由浅入深
1、如何爬取图片数据
import requests
if __name__=="__main__":
url='http://i.gtimg.cn/qqlive/img/jpgcache/files/qqvideo/hori/q/qsmjp87yyoqm7fy.jpg'
#content返回的是二进制形式的图片数据
#text 字符串 content 二进制 json() 对象
image_data=requests.get(url=url).content
with open('./longmao.jpg','wb') as fp:
fp.write(image_data)
2、爬取豆瓣页面图片
我想爬取这些电影的封面图片
把这个网页拖到最后,发现并没有发送ajax请求,这就是一个单个的页面
打开源码分析一下
找到了我们想要的图片的位置
编写简单的正则获取图片的url
obj = re.compile(r'<tr class="item">.*?<a.*?<img src="(?P<srcs>.*?)"',re.S)
可以直接开始写代码了
import requests
import re
import os
if __name__=="__main__":
if not os.path.exists('./pictures'):
os.mkdir('./pictures')
url='https://movie.douban.com/chart'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62'
}
response=requests.get(url=url,headers=headers)
text=response.text
obj = re.compile(r'<tr class="item">.*?<a.*?<img src="(?P<srcs>.*?)"',re.S)
result=obj.finditer(text)
for it in result:
src=it.group('srcs')
imgName=src.split('/')[-1]
imgPath='./pictures/'+imgName
image_data = requests.get(url=src).content
with open(imgPath, 'wb') as fp:
fp.write(image_data)
就得到我们想要的图片了
3、爬取喜剧电影排行榜
比如,我想爬取喜剧排行榜,前一百名的电影名称,主演,电影封面
拖动到页面最后,发现他会自动进行页面局部刷新,但是url没有变,是ajax请求
使用浏览器简单抓包工具
抓包的时候,你把页面往下拖,达到刚才局部刷新的效果
抓到了一个hxr包,打开
get方式
返回数据类型为json类型
get参数
预览一下发现这个json数据里面就有我们需要的信息
可以编写代码了
import requests
import json
if __name__=="__main__":
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62'
}
url="https://movie.douban.com/j/chart/top_list"
#url携带参数,最好把参数存放在字典里面,原url为https://movie.douban.com/j/chart/top_list?type=24&interval_id=100:90&action=&start=20&limit=20
param={
'type':'24',
'interval_id': '100:90',
'action':'',
'start':'0', #从库中第几部电影开始
'limit':'100', #一次取出的个数
}
response=requests.get(url=url,params=param,headers=headers)
list_data=response.json()
#这是直接把json数据保存起来了
fp=open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
fw=open("rank.csv","w",encoding='gb18030', errors='ignore')
#下面我要只取出我想要的数据
for i in list_data:
ls=[str(i['rank']),str(i['title']),str(i['release_date'])]
fw.write(",".join(ls) + "\n")
print('over')
我没有写保存100张图片了,大家如果有兴趣的话可以自己试一下,这里已经基本上写完了
json解析网站
把json数据放到解析网站上,可以更清楚分析json数据
如果有什么错误,还望指正,感谢观看!!😝
视频学习链接,我是跟着这个视频学习的