Python 爬虫 爬取豆瓣Top 250 并将海报图片爬取下来保存 您所在的位置:网站首页 爬虫之爬取豆瓣书籍 Python 爬虫 爬取豆瓣Top 250 并将海报图片爬取下来保存

Python 爬虫 爬取豆瓣Top 250 并将海报图片爬取下来保存

2024-01-09 23:59| 来源: 网络整理| 查看: 265

本文章的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,滥用技术产生的风险与本人无关。 本文章是自己学习的一些记录。

爬取豆瓣top 250

现在的很多学习的教程例子都是爬取豆瓣影评、排名这类典型的案例 最近在学习爬虫的过程中正好自己重新温习一下学习的内容,爬取豆瓣top250,并且自己写了将海报图片爬取下来保存到本地。

开始

就像是之前我写几篇博客中那样进行爬取,爬取豆瓣top 250是分页的一个爬取 和我之前写的boss那个类似 直接上源码

#coding=utf-8 import re import requests import json from lxml import etree import time import os def get_page(url): #定义请求头 try: headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' } #发起请求 res=requests.get(url=url,headers=headers) #判断请求是否成功 if res.status_code==200: print("请求成功!") response=res.content.decode("utf-8") return response except: return None def parse_data(html): #使用xpath进行数据解析 html=etree.HTML(html) title_data=html.xpath('//div[@class="hd"]//a//span[1]//text()') estimate_score=html.xpath('//div[@class="star"]//span[2]//text()') paming_data=html.xpath('//div[@class="item"]//div//em//text()') image=html.xpath('//div[@class="pic"]//a//img/@src') infor_data=html.xpath('//p[@class=""]//text()') datalist=list(zip(title_data,estimate_score,paming_data,image,infor_data)) datamore=[{"电影名称":i[0],"评分":i[1],"排名":i[2],"电影海报地址":i[3],"电影简介信息":i[4]} for i in datalist] for a in datamore: print(a) with open("./douban.json", 'a+', encoding='utf-8') as f: f.write(json.dumps(a,ensure_ascii=False)) f.write("\n") def download_image(html): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' } html=etree.HTML(html) urls =html.xpath('//div[@class="pic"]//a//img/@src') for url in urls: # 拿到每张图片的下载地址 time.sleep(1) # 避免大规模访问 导致网站崩 file_name = url.split("/")[-1] # 图片的名字可以使用split('/')[-1] response = requests.get(url, headers=headers) # 这个是请求图片 dir_name='./haobao' if not os.path.exists(dir_name): os.mkdir(dir_name) with open(dir_name + "/" + file_name, "wb") as f: # 加/是为了体现目录的替换 f.write(response.content) def main(num): #定义url url=f'https://movie.douban.com/top250?start={num}' #调用请求函数 html=get_page(url) if html: #调用解析函数,和下载函数 parse_data(html) download_image(html) if __name__=="__main__": for i in range(10): print(f"正在爬取第{i}页数据") main(i*25) time.sleep(2)

这里的基本思路还是先进性定义主函数,进行请求和解析 使用xpath对数据进行解析 google浏览器有一个XPath Helper这个插件也很好用 在这里插入图片描述 可以安装这个插件,直接在网页上进行xpath的操作: 在这里插入图片描述 例如这样的操作 有固定的语法 可以去学习一下xpath的基本语法就可以 我爬取的是按照电影名称、评分、排名、电影海报地址、电影简介信息进行爬取,爬取后保存为json文件。 在这里有一个问题是我上篇博客遇到的 这里我找到了解决的方法,就是写入json文件的时候乱码 是因为之前没有加参数,加了参数后就正常显示了:

with open("./douban.json", 'a+', encoding='utf-8') as f: f.write(json.dumps(a,ensure_ascii=False)) f.write("\n")

就是 f.write(json.dumps(a,ensure_ascii=False))的第二个参数,ensure_ascii=False加上之后就不需要去找json文件格式的解析和转换了

爬取结果

在这里插入图片描述 这是打印出爬取的结果,因为每页有25条数据,共10页 爬取后的数据写入json文件保存: 在这里插入图片描述 这里一共是250条数据

爬取海报图片

因为找到了海报的图片地址,我就想着把这些海报也都爬取下来。于是写了一个函数download_image():

def download_image(html): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' } html=etree.HTML(html) urls =html.xpath('//div[@class="pic"]//a//img/@src') for url in urls: # 拿到每张图片的下载地址 time.sleep(1) # 避免大规模访问 导致网站崩 file_name = url.split("/")[-1] # 图片的名字可以使用split('/')[-1] response = requests.get(url, headers=headers) # 这个是请求图片 dir_name='./haobao' if not os.path.exists(dir_name): os.mkdir(dir_name) with open(dir_name + "/" + file_name, "wb") as f: # 加/是为了体现目录的替换 f.write(response.content)

图片的名字是按照地址的[-1]索引位置进行设置的: 在这里插入图片描述 最终将250张海报图片爬取下来,保存至本地: 在这里插入图片描述 继续学习



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有