爬虫学习日记第三篇(使用正则爬取豆瓣某单个页面中图片和爬取喜剧电影排行榜保存成csv文件)

举出的三个点,由浅入深


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数据


如果有什么错误,还望指正,感谢观看!!😝

视频学习链接,我是跟着这个视频学习的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开心星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值