记第一次使用Scrapy框架爬取豆瓣电影

实验目的:

    爬取豆瓣电影网top250电影的标题,评分,简介,并导入数据库

实验环境:

    Linux Ubuntu 18.04.1

    python 3.6.8

    Pycharm

    Scrapy 1.6.0

    mysql 5.7.26

实验过程:

    1.进入data目录,创建一个scrapy项目

cd /data
scrapy startproject douban

    2.使用pycharm打开刚才创建的项目

    3.切换到项目目录,创建一个爬虫 

cd /data/douban  
scrapy genspider doubanspider https://movie.douban.com/top250

    4.编写 doubanspider.py,定制爬虫规则

      

import scrapy  
class doubanspider(scrapy.Spider):  
    #项目名  
    name = "doubanspider"  
    #由于豆瓣电影设置了防爬措施,我们需要加上headers伪装浏览器发送请求,不添加以下信息将爬取不到数据  
    headler = {  
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 '  
                      'Safari/537.36',  
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'  
    }  
    #目标网站的url  
    start_urls = [  
        'https://movie.douban.com/top250'  
    ]  
    #重写scrapy方法  
    def start_requests(self):  
        for url in self.start_urls:  
            yield scrapy.Request(url=url, callback=self.parse, headers=self.headler)  
    def parse(self, response):  
        #使用css选择器,通过for循环遍历电影标题、评分及简介  
        for quote in response.css('div.item'):  
            yield {  
                "film_name": quote.css('div.info div.hd a span.title::text').extract_first(),  
                "score": quote.css('div.info div.bd div.star span.rating_num::text').extract(),  
                "Introduction": quote.css('div.info div.bd p.quote span.inq::text').extract()  
     }  
        next_url=response.css('div.paginator span.next a::attr(href)').extract()  
 
#判断是否还有下一页数据,如果有就继续爬,直到爬取完最后一页  
        if next_url:  
            next_url="https://movie.douban.com/top250"+next_url[0]  
            print(next_url)  
            yield scrapy.Request(next_url,headers=self.headler)

    5.选择setting.py文件,将其中的ROBOTSTXT_OBEY参数由True改为False。

    6.创建一个main.py

      

from scrapy import cmdline  
name='doubanspider -o douban.csv'  
cmd = 'scrapy crawl {0}'.format(name)  
cmdline.execute(cmd.split())

    7.运行main.py,创建出来douban.csv文件

    8.导入数据库

      进入数据库

sudo mysql -uroot


      创建douban数据库

create database douban;  
use douban

      创建表

create table doubantb  
(  
  film_name varchar(10) not null,  
  score varchar(10) not null,  
  Introduction longtext not null  
);  

      将csv文件导入

load data infile '/data/douban/douban.csv' into table doubantb fields terminated by ','  optionally enclosed by '"' escaped by '"'  lines terminated by '\r\n';

   实验结束!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值