python-scrapy框架爬取某瓣电视剧信息--异步加载页面
前期准备,首先要有python环境+scrapy环境+pycharm环境
一、建立爬虫所需的环境,在命令行输入:
scrapy startproject doubantv #命名自定义就好
会生成一个名为doubantv的文件夹,cd进入doubantv文件夹,在进入spiders文件夹,执行命令,新建爬虫文件:
scrapy gensipder tv "https://movie.douban.com" #注明爬虫文件名,要爬取的网址域
然后就可以用pycharm打开doubantv文件了。
二、编写爬虫文件
https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E8%A7%86%E5%89%A7&start=0#爬取的网址
我们会发现这个页面是通过ajax异步加载来不断获取页面的,通过我们细心的观察不难发现,每次加载页面都会出现一个有规律的网址,也就是上面给出的这个网址。因此我们就可以非常轻松的获取完整的页面信息了。
首先添加想要爬取的字段信息。
由于我们只是个人学习测试使用,所以就随机选择几个字段进行爬取:
在iteam文件编写 import scrapy class DoubantvItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() # 导演 directors = scrapy.Field() # 评分 rate = scrapy.Field() # 标题 title = scrapy.Field() # 跟进连接 url = scrapy.Field() # 图片 cover = scrapy.Field()
然后就是编写spiders内的爬虫文件了:
编写tv.py # -*- coding: utf-8 -*- import json import scrapy from doubantv.items import DoubantvItem class TvSpider(scrapy.Spider): name = 'tv' allowed_domains = ['movie.douban.com'] #爬取域 offset = 0 url = 'https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E8%A7%86%E5%89%A7&start=' #爬取的链接 #格式化的url,注意逗号不要少 start_urls = ( url + str(offset), )
#主函数 def parse(self, response): #将相应问价转换成json形式 datas = json.loads(response.text)["data"]
#遍历数组获取内容 for data in datas: item = DoubantvItem() # 导演 item['directors'] = data['directors'] # 评分 item['rate'] = data['rate'] # 标题 item['title'] = data['title'] # 跟进连接 item['url'] = data['url'] # 图片 item['cover'] = data['cover'] #传送到管道文件
yield item
#获取封面图片url for data in datas: # 图片 image = data['cover']
#传送到管道文件 yield scrapy.Request(image, callback=self.parse)
#自定义爬取响应地址数,我这里随意设置了一个20000 if self.offset < 20000: self.offset += 20
#每次调用函数回滚,重复递归执行 yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
接下来我们编写管道文件:
编写pipelines文件 import os import urllib from urllib.request import urlretrieve class DoubantvPipeline(object):
#初始化响应文件,建立一个doubantv.txt文件,和一个用户存放图片的目录 def __init__(self): self.filename = open("doubantv.txt", "wb") self.path = "G:\images\p" self.page = 0
#没有就新建一个 if not os.path.exists(self.path): os.mkdir(self.path) #保存文件信息的函数 def process_item(self, item, spider): print("------------------------------------------------------") directors = item["directors"] rate = item["rate"] title = item["title"] url = item["url"] cover = item["cover"] print("---------------------------------------------------")
#这里我们随机保存了一个内容 self.filename.write(title.encode('utf-8') + ' '.encode('utf-8') + rate.encode('utf-8') + '\r'.encode('utf-8')) #保存图片文件到预定的目录 src = item['cover'] pathname = os.path.join(self.path, str(self.page) + cover + '.jpg') try: res = urllib.request.urlopen(src) #下载图片文件 with open(pathname, 'wb') as f: f.write(res.read()) self.page += 1 except Exception as e: print(e) return item #关闭文件,释放内存 def colse_spider(self, spider): self.filename.close()
然后执行爬虫文件:
在跟目录下执行
scrapy crawl tv
耐性等待片刻后。。。
去他*的世界 第二季 9.2 致命女人 第一季 9.3 去他*的世界 第一季 9.1 摩登情爱 第一季 8.7 鹤唳华亭 7.4 从前有座灵剑山 7.4 美国恐怖故事:1984 第九季 7.4 谍战深海之惊蛰 6.5 请回答1988 9.7
。。。。。。。。。
OVER
作者:Jace Jin
github地址:https://github.com/buxianghua
原创文章版权归作者所有.
欢迎转载,转载时请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
欢迎转载,转载时请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结