基于Python Scrapy的豆瓣Top250电影爬虫程序

server/2024/12/23 2:57:59/

Scrapy安装

Python实现一个简单的爬虫程序(爬取图片)_python简单扒图脚本-CSDN博客

创建爬虫项目

创建爬虫项目:

scrapy startproject test_spider

创建爬虫程序文件:

>cd test_spider\test_spider\spiders
>scrapy genspider doubanSpider movie.douban.com

编写爬虫程序

分析网址:

https://movie.douban.com/top250?start=25&filter=

其中,start=25是分页信息,一共有10页,每页25个电影记录,start数值为0、25、50……225。

python">for i in range(0,24,25):req = "https://movie.douban.com/top250?start={}&filter=".format(i)yield scrapy.Request(url=req, meta={'url': req}, headers=self.headers,callback=self.parse)time.sleep(2) 

提取电影网址、中文名、外文名:

python">html_data = response.body
sp = BeautifulSoup(html_data, 'html.parser')
list = sp.find(class_='grid_view').find_all('li')
for one in list:link = one.find(class_='info').find(class_='hd').find('a')['href']print(link)titles =  one.find_all(class_='title')title_zh =titles[0].text.strip().replace(',',' ')title_en = ''if len(titles)>1:title_en = titles[1].text.strip().replace(',',' ').lstrip('/')print(title_zh,title_en)

提取导演、演员信息:

python">bd = one.find(class_='info').find(class_='bd')
p1 = bd.find_all('p')[0].text.strip().replace('\n','').replace('\r','').replace(',',' ')
print(p1)

提取评分信息:

python">spans = bd.find(class_='star').find_all('span')
score = spans[1].text
num = spans[3].text.replace('人评价','')
print(score,num)

写入csv文件:

python">with open('movies.csv','a+',encoding='utf-8') as f:f.write('网址,中文名,外文名,导演,评分,评价人数\n')with open('movies.csv','a+',encoding='utf-8') as f:f.write('{},{},{},{},{},{}\n'.format(link,title_zh,title_en,p1,score,num))

完整代码:

python">import scrapy
from bs4 import BeautifulSoup
import timeclass DoubanspiderSpider(scrapy.Spider):name = "doubanSpider"allowed_domains = ["movie.douban.com"]start_urls = ["https://movie.douban.com"]headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36','Cookie': ''}def start_requests(self):   with open('movies.csv','a+',encoding='utf-8') as f:f.write('网址,中文名,外文名,导演,评分,评价人数\n')for i in range(0,24,25):req = "https://movie.douban.com/top250?start={}&filter=".format(i)yield scrapy.Request(url=req, meta={'url': req}, headers=self.headers,callback=self.parse)time.sleep(2) def parse(self, response):print("========= parse ==============")html_data = response.bodysp = BeautifulSoup(html_data, 'html.parser')list = sp.find(class_='grid_view').find_all('li')for one in list:link = one.find(class_='info').find(class_='hd').find('a')['href']print(link)titles =  one.find_all(class_='title')title_zh =titles[0].text.strip().replace(',',' ')title_en = ''if len(titles)>1:title_en = titles[1].text.strip().replace(',',' ').lstrip('/')print(title_zh,title_en)bd = one.find(class_='info').find(class_='bd')p1 = bd.find_all('p')[0].text.strip().replace('\n','').replace('\r','').replace(',',' ')print(p1)spans = bd.find(class_='star').find_all('span')score = spans[1].textnum = spans[3].text.replace('人评价','')print(score,num)with open('movies.csv','a+',encoding='utf-8') as f:f.write('{},{},{},{},{},{}\n'.format(link,title_zh,title_en,p1,score,num))

运行爬虫程序:

scrapy crawl doubanSpider

生成的csv文件如下:


http://www.ppmy.cn/server/152387.html

相关文章

【守护进程 】【序列化与反序列化】

目录 1. 前后台任务2. 守护进程3. TCP的其它概念4. 序列化与反序列化 1. 前后台任务 我们之前在 信号(一)【概念篇】 介绍过 Crtl c 的本质就是给前台进程发送一个信号,进程执行该信号的默认处理动作,进而终止进程,随…

文献研读|基于像素语义层面图像重建的AI生成图像检测

前言:本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍,分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade,以及基于语义层面重建的检测方法 SimGIR 和 Zerofake;并对相应方法进行比较。 相关文章:论…

重生之我在异世界学编程之算法与数据结构:深入静态顺序表篇

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、顺序表的概念及结构1. 顺序表…

ELK部署

背景 很多公司还是在单体项目中苦苦挣扎,没有必要上elk系统,大家都懂的一个原则系统的技术栈越多系统越复杂,维护起来也越麻烦,在没有大流量高并发的情况下我们就用单体服务挺舒服。我们行业的特殊性做的都是BTB的项目&#xff0…

Bootstrap Blazor中使用PuppeteerSharp对HTML截图

PuppeteerSharp是一个基于.NET的库,提供了对Puppeteer的C#支持,用于自动化,可用于测试、截图、爬虫等任务。 官网:Puppeteer Sharp(感觉文章中有些代码段没有更新,直接用会有报错)。 本篇文章…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节,它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法,如全站仪测量,主要依赖于现场人工操作,存在一些明显的局限性,例如作业时间长、工作量大…

uni-app商品搜索页面

目录 一:功能概述 二:功能实现 一:功能概述 商品搜索页面,可以根据商品品牌,商品分类,商品价格等信息实现商品搜索和列表展示。 二:功能实现 1:商品搜索数据 <view class="search-map padding-main bg-base"> <view class…

uniapp使用腾讯地图接口的时候提示此key每秒请求量已达到上限或者提示此key每日调用量已达到上限问题解决

要在创建的key上添加配额 点击配额之后进入分配页面&#xff0c;分配完之后刷新uniapp就可以调用成功了。