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

Scrapy安装

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

创建爬虫项目

创建爬虫项目:

bash 复制代码
scrapy startproject test_spider

创建爬虫程序文件:

bash 复制代码
>cd test_spider\test_spider\spiders
>scrapy genspider doubanSpider movie.douban.com

编写爬虫程序

分析网址:

bash 复制代码
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 time


class 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.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)
            
            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].text
            num = 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文件如下:

相关推荐
花好月圆春祺夏安1 小时前
基于odoo17的设计模式详解---装饰模式
数据库·python·设计模式
萧鼎2 小时前
深度探索 Py2neo:用 Python 玩转图数据库 Neo4j
数据库·python·neo4j
华子w9089258592 小时前
基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
python·spark·django
Rockson3 小时前
使用Ruby接入实时行情API教程
javascript·python
Tipriest_4 小时前
Python关键字梳理
python·关键字·keyword
im_AMBER5 小时前
学习日志05 python
python·学习
大虫小呓5 小时前
Python 处理 Excel 数据 pandas 和 openpyxl 哪家强?
python·pandas
哪 吒6 小时前
2025B卷 - 华为OD机试七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD(Python/JS/C/C++)
python·算法·华为od·华为od机试·2025b卷
摸爬滚打李上进7 小时前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
凛铄linshuo8 小时前
爬虫简单实操2——以贴吧为例爬取“某吧”前10页的网页代码
爬虫·python·学习