Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >爬取豆瓣电影信息

爬取豆瓣电影信息

作者头像
py3study
发布于 2020-01-20 08:43:21
发布于 2020-01-20 08:43:21
1.3K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

昨天写了一个小爬虫,爬取了豆瓣上2017年中国大陆的电影信息,网址为豆瓣选影视,爬取了电影的名称、导演、编剧、主演、类型、上映时间、片长、评分和链接,并保存到MongoDB中。

一开始用的本机的IP地址,没用代理IP,请求了十几个网页之后就收不到数据了,报HTTP错误302,然后用浏览器打开网页试了一下,发现浏览器也是302。。。

但是我不怕,我有代理IP,哈哈哈!详见我前一篇随笔:爬取代理IP。 使用代理IP之后果然可以持续收到数据了,但中间还是有302错误,没事,用另一个代理IP请求重新请求一次就好了,一次不行再来一次,再来一次不行那就再再来一次,再再不行,那。。。

下面附上部分代码吧。

1.爬虫文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scrapy
import json
from douban.items import DoubanItem


parse_url = "https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start={}&countries=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86&year_range=2017,2017"


class Cn2017Spider(scrapy.Spider):
    name = 'cn2017'
    allowed_domains = ['douban.com']
    start_urls = ['https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=%E7%94%B5%E5%BD%B1&start=0&countries=%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86&year_range=2017,2017']


    def parse(self, response):
        data = json.loads(response.body.decode())
        if data is not None:
            for film in data["data"]:
                print(film["url"])
                item = DoubanItem()
                item["url"] = film["url"]
                yield scrapy.Request(
                    film["url"],
                    callback=self.get_detail_content,
                    meta={"item": item}
                )

        for page in range(20,3200,20):
            yield scrapy.Request(
                parse_url.format(page),
                callback=self.parse
            )


    def get_detail_content(self,response):
        item = response.meta["item"]
        item["film_name"] = response.xpath("//div[@id='content']//span[@property='v:itemreviewed']/text()").extract_first()
        item["director"] = response.xpath("//div[@id='info']/span[1]/span[2]/a/text()").extract_first()
        item["scriptwriter"] = response.xpath("///div[@id='info']/span[2]/span[2]/a/text()").extract()
        item["starring"] = response.xpath("//div[@id='info']/span[3]/span[2]/a[position()<6]/text()").extract()
        item["type"] = response.xpath("//div[@id='info']/span[@property='v:genre']/text()").extract()
        item["release_date"] = response.xpath("//div[@id='info']/span[@property='v:initialReleaseDate']/text()").extract()
        item["running_time"] = response.xpath("//div[@id='info']/span[@property='v:runtime']/@content").extract_first()
        item["score"] = response.xpath("//div[@class='rating_self clearfix']/strong/text()").extract_first()
        # print(item)
        if item["film_name"] is None:
            # print("*" * 100)
            yield scrapy.Request(
                item["url"],
                callback=self.get_detail_content,
                meta={"item": item},
                dont_filter=True
            )
        else:
            yield item
2.items.py文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scrapy


class DoubanItem(scrapy.Item):
    #电影名称
    film_name = scrapy.Field()
    #导演
    director = scrapy.Field()
    #编剧
    scriptwriter = scrapy.Field()
    #主演
    starring = scrapy.Field()
    #类型
    type = scrapy.Field()
    #上映时间
    release_date = scrapy.Field()
    #片长
    running_time = scrapy.Field()
    #评分
    score = scrapy.Field()
    #链接
    url = scrapy.Field()
3.middlewares.py文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from douban.settings import USER_AGENT_LIST
import random
import pandas as pd


class UserAgentMiddleware(object):
    def process_request(self, request, spider):
        user_agent = random.choice(USER_AGENT_LIST)
        request.headers["User-Agent"] = user_agent
        return None


class ProxyMiddleware(object):
    def process_request(self, request, spider):
        # Called for each request that goes through the downloader
        # middleware.
        ip_df = pd.read_csv(r"C:\Users\Administrator\Desktop\douban\douban\ip.csv")
        ip = random.choice(ip_df.loc[:, "ip"])
        request.meta["proxy"] = "http://" + ip
        return None
4.pipelines.py文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pymongo import MongoClient

client = MongoClient()
collection = client["test"]["douban"]

class DoubanPipeline(object):
    def process_item(self, item, spider):
        collection.insert(dict(item))
5.settings.py文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DOWNLOADER_MIDDLEWARES = {
    'douban.middlewares.UserAgentMiddleware': 543,
    'douban.middlewares.ProxyMiddleware': 544,
}

ITEM_PIPELINES = {
   'douban.pipelines.DoubanPipeline': 300,
}

ROBOTSTXT_OBEY = False
DOWNLOAD_TIMEOUT = 10
RETRY_ENABLED = True
RETRY_TIMES = 10

程序共运行1小时20分21.473772秒,抓取到2986条数据。


最后, 还是要每天开心鸭!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【scrapy】scrapy按分类爬取豆瓣电影基础信息
本爬虫实现按分类爬取豆瓣电影信息,一次爬取一个分类,且自动切换代理池,防止ip在访问过多过频繁后无效。
蛮三刀酱
2019/03/26
8680
【scrapy】scrapy按分类爬取豆瓣电影基础信息
爬取豆瓣电影排名前250部电影并且存入Mongo数据库
需求:爬取豆瓣电影top250(https://movie.douban.com/top250)的电影数据:
用户2337871
2019/07/19
9530
爬取4567电影网「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/154556.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/06
2.3K0
python scrapy爬虫练习(1) 爬取豆瓣电影top250信息
文章目录 一、分析网页 目标URL:https://movie.douban.com/top250?start=0&filter= 每一页有25条电影信息,总共10页。检查网页可以发现,每条电影的详细
叶庭云
2020/09/17
5.1K0
python  scrapy爬虫练习(1)   爬取豆瓣电影top250信息
安装和使用Scrapy
可以先创建虚拟环境并在虚拟环境下使用pip安装scrapy。 $ 项目的目录结构如下图所示。 (venv) $ tree . |____ scrapy.cfg |____ douban | |____ spiders | | |____ __init__.py | | |____ __pycache__ | |____ __init__.py | |____ __pycache__ | |____ middlewares.py | |____ settings.py | |____ items.py |
用户8442333
2021/05/21
5010
爬虫项目#4567电影网scrapy数据爬取moviePro/持久化储存handReqPro
仅用与备忘录 ____movie.py import scrapy from moviePro.items import MovieproItem
全栈程序员站长
2022/09/17
4940
Python爬虫——Scrapy爬取技术博客文章
创建工程 $scrapy startproject ArticleSpider You can start your first spider with: scrapy genspider example example.com 创建爬虫 通过scrapy genspide创建jobbole的爬虫 $cd ArticleSpider $scrapy genspider jobbole blog.jobbole.com 创建main.py import sys import os from
羊羽shine
2019/05/29
5760
Python爬虫项目--爬取链家热门城市
本次实战是利用爬虫爬取链家的新房(声明: 内容仅用于学习交流, 请勿用作商业用途)
py3study
2020/01/20
7750
python爬虫入门(九)Scrapy框架之数据库保存
豆瓣电影TOP 250爬取-->>>数据保存到MongoDB 豆瓣电影TOP 250网址 要求: 1.爬取豆瓣top 250电影名字、演员列表、评分和简介 2.设置随机UserAgent和Proxy
zhang_derek
2018/04/11
8030
python爬虫入门(九)Scrapy框架之数据库保存
Python3爬虫学习.md
(1) urllib 简单的爬取指定网站 (2) Scrapy 爬虫框架 (3) BeautifulSoup 爬虫解析
全栈工程师修炼指南
2020/10/23
8340
Python3爬虫学习.md
Scrapy框架新手入门教程
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
小锋学长生活大爆炸
2020/08/13
7100
Scrapy框架新手入门教程
python爬虫入门:scrapy爬取书籍的一些信息
爬取这个网上的书籍http://www.allitebooks.com/security/ 然后价格等信息在亚马逊上爬取:https://www.amazon.com/s/ref=nb_sb_noss
禹都一只猫olei
2018/05/25
7860
Scrapy入门案例——爬取豆瓣电影
首先scrapy startproject douban 建立项目,其次切换到spiders目录下,scrapy genspider douban_movie 建立爬虫。
100000860378
2018/09/13
7920
Scrapy入门案例——爬取豆瓣电影
Scrapy框架爬取伯乐在线全部文章并写入数据库案例
3.Start_urls = [‘http://blog.jobbole.com/all-posts/’]
菲宇
2019/06/13
7090
电影荒?看看豆瓣排行榜上有没有你想看的电影!
项目创建完成后可以看到在工程创建的位置有了douban文件夹,打开以后包含了上述的组件,可以使用spyder,pycharm等ide打开项目
老肥码码码
2020/01/17
8760
电影荒?看看豆瓣排行榜上有没有你想看的电影!
Python最火爬虫框架Scrapy入门与实践,豆瓣电影 Top 250 数据采集
Python爬虫框架Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍。所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等)的具有很强通用性的项目模板。对于框架的学习,重点是要学习其框架的特性、各个功能的用法即可。
二爷
2020/07/22
2.4K0
Python最火爬虫框架Scrapy入门与实践,豆瓣电影 Top 250 数据采集
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
Scrapy 是一个用 Python 编写的开源框架,它可以帮助你快速地创建和运行爬虫项目,从网页中提取结构化的数据。Scrapy 有以下几个特点:
jackcode
2023/08/07
5250
构建一个简单的电影信息爬虫项目:使用Scrapy从豆瓣电影网站爬取数据
Python爬虫——Scrapy爬取名人名言
toscrape是一个名人名言的网站 一条名人名言的结构如下 <div class="quote" itemscope="" itemtype="http://schema.org/CreativeWork"> <span class="text" itemprop="text">“I have not failed. I've just found 10,000 ways that won't work.”</span> <span>by <small class="au
羊羽shine
2019/05/29
1K0
从原理到实战,一份详实的 Scrapy 爬虫教程
本文将从原理到实战带领大家入门另一个强大的框架 Scrapy。如果对Scrapy感兴趣的话,不妨跟随本文动手做一遍!
CDA数据分析师
2021/08/05
11.2K0
从原理到实战,一份详实的 Scrapy 爬虫教程
Scrapy框架: 第一个程序
第三步: 在spider目录下创建爬虫文件: zufang_spider.py 2.1 创建一个类,并继承scrapy的一个子类: scrapy.Spider 2.2 自定义爬取名, name="" 后面运行框架需要用到; 2.3 定义爬取目标网址 2.4 定义scrapy的方法
hankleo
2020/09/17
2900
推荐阅读
相关推荐
【scrapy】scrapy按分类爬取豆瓣电影基础信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验