Spyder爬取豆瓣电影Top500-csv文件存储

本文介绍了一个使用Python的requests库和lxml库爬取豆瓣电影Top250榜单数据的方法,并将数据存储为CSV文件。通过解析HTML,获取了电影排名、名称、链接、评分和评论等信息。
部署运行你感兴趣的模型镜像

Spyder爬取豆瓣电影Top500-csv文件存储

废话少说,直接上代码:

# -*- coding: utf-8 -*-
"""
Created on Fri May  1 16:59:13 2020

@author: ASUS
"""


import requests
from lxml import etree
import csv

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                '(KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
    }

movie_file = open('豆瓣电影Top250.csv', mode='a', newline='', encoding='utf8')
writer = csv.writer(movie_file)
# 设置csv文件表头
writer.writerow(['电影排名','电影名称','链接','电影评分','评论'])

urls = ['https://movie.douban.com/top250?start={}&filter='.format(i*25) for i in range(10)]

i = 0

for url in urls:
    res = requests.get(url, headers=headers)
    html = etree.HTML(res.text)
    divs = html.xpath('//div[@class="item"]')
    for div in divs:
        try:
            # 获取排名
            rank = div.xpath('.//em/text()')[0]
            # 获取电影名称
            name = div.xpath('.//a/span[1]/text()')[0]
            # 获取链接
            link = div.xpath('.//div[@class="hd"]/a/@href')[0]
            # 获取评分
            score = div.xpath('.//div[@class="star"]//span[2]//text()')[0]
            # 获取评论
            comments = div.xpath('.//p[@class="quote"]/span/text()')
            comment = comments[0] if len(comments) != 0 else '空'
            
            # 写入文件
            writer.writerow([rank,name,link,score,comment])
        except:
            continue
        
    i += 1
    print('第{}页已经爬取完毕'.format(i))

# 关闭文件    
movie_file.close()
        

代码还有改进的地方,比如模块化,让代码可读性加强。
还有很多不足的地方,欢迎大家批评指正,同时也欢迎大家交流技术。

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何用 Python 爬取豆瓣电影数据 #### 使用 Requests 和 PyQuery 库实现爬虫 可以利用 `Requests` 和 `PyQuery` 这两个强大的库来完成豆瓣电影详情页面的数据抓取工作。以下是具体方法以及代码示例: ```python import requests from pyquery import PyQuery as pq def fetch_movie_details(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get(url, headers=headers) if response.status_code == 200: doc = pq(response.text) title = doc('#content h1').text().strip() rating = doc('.rating_self strong').text().strip() genres = ', '.join([item.text() for item in doc('.genres span').items()]) director = doc('a[href*="celebrity"]').eq(0).text().strip() release_date = doc('.subject-info .pl:contains("上映日期:") + .date').text().strip() result = { 'title': title, 'rating': rating, 'genres': genres, 'director': director, 'release_date': release_date } return result return None url_example = "https://movie.douban.com/subject/1292052/" # 替换为目标电影的 URL data = fetch_movie_details(url_example) if data: print(data) else: print("Failed to retrieve movie details.") ``` 上述代码展示了如何通过指定电影详情页链接,提取诸如标题、评分、类型、导演和上映日期等信息[^1]。 --- #### 将数据存储至 MySQL 数据库 为了长期保存所抓取的数据,可将其存入关系型数据库如 MySQL 中。下面是一段完整的流程说明及其对应的代码片段: 首先安装必要的依赖项: ```bash pip install pymysql ``` 接着编写连接与写入逻辑: ```python import pymysql def save_to_mysql(movie_data): connection = pymysql.connect( host='localhost', user='root', password='your_password_here', database='douban_movies', charset='utf8mb4' ) try: with connection.cursor() as cursor: sql_query = """ INSERT INTO movies ( title, rating, genres, director, release_date ) VALUES (%s, %s, %s, %s, %s); """ values = ( movie_data['title'], float(movie_data['rating']) if movie_data['rating'] else None, movie_data['genres'], movie_data['director'], movie_data['release_date'] ) cursor.execute(sql_query, values) connection.commit() finally: connection.close() save_to_mysql(data) print("Data saved successfully!") ``` 此部分实现了从内存中的字典对象映射到 SQL 表记录的过程[^2]。 --- #### 定义 Spyder 函数批量处理多类影片 如果目标是从多个分类下分页获取大量条目,则需设计更灵活通用的功能模块。如下所示即为一种可行方案: ```python class DoubanMovieCrawler: def __init__(self): self.base_url = "https://api.douban.com/v2/movie/search?tag={}&start={}" self.headers = {'User-Agent': 'Custom User Agent'} self.movie_types = {"科幻": ["science_fiction", 100], "爱情": ["romance", 150]} def spyder(self): for category, info in self.movie_types.items(): tag_name, total_count = info for offset in range(0, total_count, 20): formatted_url = self.base_url.format(tag_name, offset) resp = requests.get(formatted_url, headers=self.headers) parsed_json = resp.json() for entry in parsed_json["subjects"]: enriched_entry = {**entry, **{"category": category}} yield enriched_entry crawler_instance = DoubanMovieCrawler() for record in crawler_instance.spyder(): print(record) ``` 这段脚本能够按照预设标签筛选条件自动迭代访问 API 接口,并返回每部作品的基础属性集合[^3]。 --- #### 可能涉及的主要字段列表 当构建自定义爬虫项目时,通常会关注以下几个维度的内容采集需求: - 电影名称 (`name`) - 类别 (`genre`) - 海报图片地址 (`cover_image`) - 发布区域 (`region`) - 上线年份 (`year_released`) - 平均得分 (`average_score`) - 主创团队成员名单 (`cast_members`) - 用户评价摘要 (`review_summary`) ...等等更多细节均可依据实际应用场景调整扩展[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值