资讯专栏INFORMATION COLUMN

scrapy入门:豆瓣电影top250爬取

xialong / 990人阅读

摘要:本文内容爬取豆瓣电影页面内容,字段包含排名,片名,导演,一句话描述有的为空,评分,评价人数,上映时间,上映国家,类别抓取数据存储介绍爬虫框架教程一入门创建项目创建爬虫注意,爬虫名不能和项目名一样应对反爬策略的配置打开文件,将修改为。

本文内容

爬取豆瓣电影Top250页面内容,字段包含:
排名,片名,导演,一句话描述 有的为空,评分,评价人数,上映时间,上映国家,类别

抓取数据存储

scrapy介绍

Scrapy爬虫框架教程(一)-- Scrapy入门

创建项目
scrapy startproject dbmovie
创建爬虫
cd dbmoive
scarpy genspider dbmovie_spider movie.douban.com/top250

注意,爬虫名不能和项目名一样

应对反爬策略的配置

打开settings.py文件,将ROBOTSTXT_OBEY修改为False。

ROBOTSTXT_OBEY = False

修改User-Agent

DEFAULT_REQUEST_HEADERS = {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en",
    "Accept-Encoding" :  "gzip, deflate, br",
    "Cache-Control" :  "max-age=0",
    "Connection" :  "keep-alive",
    "Host" :  "movie.douban.com",
    "Upgrade-Insecure-Requests" :  "1",
    "User-Agent" :  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
}

运行爬虫
scrapy crawl dbmovie_spider
定义item

根据前面的分析,我们需要抓取一共十个字段的信息,现在在items.py文件中定义item

import scrapy

class DoubanItem(scrapy.Item):
    # 排名
    ranking = scrapy.Field()
    # 篇名 
    title = scrapy.Field()
    # 导演
    director = scrapy.Field()
    # 一句话描述 有的为空
    movie_desc = scrapy.Field()
    # 评分
    rating_num = scrapy.Field()
    # 评价人数
    people_count = scrapy.Field()
    # 上映时间
    online_date = scrapy.Field()
    # 上映国家
    country = scrapy.Field()
    # 类别
    category = scrapy.Field()
字段提取

这里需要用到xpath相关知识,偷了个懒,直接用chrome插件获取
Chrome浏览器获取XPATH的方法----通过开发者工具获取

def parse(self, response):
    item = DoubanItem()
    movies = response.xpath("//div[@class="item"]")
    for movie in movies:
        # 名次
        item["ranking"] = movie.xpath("div[@class="pic"]/em/text()").extract()[0]
        # 片名 提取多个片名
        titles = movie.xpath("div[@class="info"]/div[1]/a/span/text()").extract()[0]
        item["title"] = titles
        # 获取导演信息
        info_director = movie.xpath("div[2]/div[2]/p[1]/text()[1]").extract()[0].replace("
", "").replace(" ", "").split("xa0")[0]
        item["director"] = info_director
        # 上映日期
        online_date = movie.xpath("div[2]/div[2]/p[1]/text()[2]").extract()[0].replace("
", "").replace("xa0", "").split("/")[0].replace(" ", "")
        # 制片国家
        country = movie.xpath("div[2]/div[2]/p[1]/text()[2]").extract()[0].replace("
", "").split("/")[1].replace("xa0", "")
        # 影片类型
        category = movie.xpath("div[2]/div[2]/p[1]/text()[2]").extract()[0].replace("
", "").split("/")[2].replace("xa0", "").replace(" ", "")
        item["online_date"] = online_date
        item["country"] = country
        item["category"] = category
        movie_desc = movie.xpath("div[@class="info"]/div[@class="bd"]/p[@class="quote"]/span/text()").extract()
        if len(movie_desc) != 0:  # 判断info的值是否为空,不进行这一步有的电影信息并没有会报错或数据不全
            item["movie_desc"] = movie_desc
        else:
            item["movie_desc"] = " "

        item["rating_num"] = movie.xpath("div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()").extract()[0]
        item["people_count"] = movie.xpath("div[@class="info"]/div[@class="bd"]/div[@class="star"]/span[4]/text()").extract()[0]
        yield item
    # 获取下一页
    next_url = response.xpath("//span[@class="next"]/a/@href").extract()
    
    if next_url:
        next_url = "https://movie.douban.com/top250" + next_url[0]
        yield scrapy.Request(next_url, callback=self.parse, dont_filter=True)
存储数据,mysql

注意1064错误,表中字段包含mysql关键字导致
Scrapy入门教程之写入数据库

import pymysql

def dbHandle():
    conn = pymysql.connect(
        host="localhost",
        user="root",
        passwd="pwd",
        db="dbmovie",
        charset="utf8",
        use_unicode=False
    )
    return conn

class DoubanPipeline(object):
    def process_item(self, item, spider):
        dbObject = dbHandle()
        cursor = dbObject.cursor()
        sql = "insert into db_info(ranking,title,director,movie_desc,rating_num,people_count,online_date,country,category) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)"

        try:
            cursor.execute(sql, (item["ranking"], item["title"], item["director"], item["movie_desc"], item["rating_num"], item["people_count"], item["online_date"], item["country"], item["category"]))
            dbObject.commit()
        except Exception as e:
            print(e)
            dbObject.rollback()

        return item
简单应对爬虫策略

Scrapy爬虫——突破反爬虫最全策略解析

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44910.html

相关文章

  • scrapy入门教程——爬取豆瓣电影Top250

    摘要:注意爬豆爬一定要加入选项,因为只要解析到网站的有,就会自动进行过滤处理,把处理结果分配到相应的类别,但偏偏豆瓣里面的为空不需要分配,所以一定要关掉这个选项。 本课只针对python3环境下的Scrapy版本(即scrapy1.3+) 选取什么网站来爬取呢? 对于歪果人,上手练scrapy爬虫的网站一般是官方练手网站 http://quotes.toscrape.com 我们中国人,当然...

    senntyou 评论0 收藏0
  • scrapy爬取豆瓣Top250电影

    摘要:这次我们爬取的内容准备步骤找到格式网页中需要爬取的数据的例如我们需要爬取图片的这里用的是不会用的同学请百度然后我们开始建立工程打开然后在你想要建立工程的目录下面输入就会自动建立一个工程然后去根目录建立一个去这个目录里建立一个注意这里的主爬虫 这次我们爬取的内容 showImg(https://segmentfault.com/img/bVSirX?w=1021&h=521); 准备步骤...

    codergarden 评论0 收藏0
  • Python爬虫 - scrapy - 爬取豆瓣电影TOP250

    摘要:前言新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例。 0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例。所以找了很多实例和文...

    WalkerXu 评论0 收藏0
  • Java爬虫之下载IMDB中Top250电影的图片

    摘要:介绍在博客爬虫爬取豆瓣电影图片中我们利用的爬虫框架,将豆瓣电影图片下载到自己电脑上。那么,在的爬虫的也可以下载图片吗答案当然是肯定的在本次分享中,我们将利用的包和函数来实现图片的下载。 介绍   在博客:Scrapy爬虫(4)爬取豆瓣电影Top250图片中我们利用Python的爬虫框架Scrapy,将豆瓣电影Top250图片下载到自己电脑上。那么,在Java的爬虫的也可以下载图片吗?答...

    tianren124 评论0 收藏0
  • 零基础如何学爬虫技术

    摘要:楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,。本文来源知乎作者路人甲链接楚江数据提供网站数据采集和爬虫软件定制开发服务,服务范围涵盖社交网络电子商务分类信息学术研究等。 楚江数据是专业的互联网数据技术服务,现整理出零基础如何学爬虫技术以供学习,http://www.chujiangdata.com。 第一:Python爬虫学习系列教程(来源于某博主:htt...

    KunMinX 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<