利用Scrapy框架爬取数据,将数据储存到MySQL数据库中

今天我们利用scrapy框架爬取数据,然后将数据储存到MySQL中,话不多说,今天我们爬取的网页是:http://www.ygdy8.com,我们要获取经典电影分类中的国内电影,日韩电影,欧美电影三个分类的第一页的详情页,并从详情页中获取到电影的名称以及下载的链接。

1.创建Scrapy框架和爬虫程序。

2.定义settings.py

3.在movie.py编写爬虫程序

# -*- coding: utf-8 -*-
import scrapy
from ..items import YanguangItem


class MovieSpider(scrapy.Spider):
    name = 'movie'
    allowed_domains = ['ygdy8.com']
    # 更改初始的url,此网址为经典影片的网址
    start_urls = ['http://www.ygdy8.com/html/gndy/index.html']

    # 获取‘更多’选项的链接,(只获取国内,日韩,欧美三个分类)
    def parse(self, response):       
        info_list=response.xpath('//div[@class="title_all"]/p/em/a/@href').extract()[:3]
        for info in info_list:
            # 拼接完整的‘更多’网址
            info='http://www.ygdy8.com'+info
            yield scrapy.Request(url=info,callback=self.get_movie_url)
    # 获取每部电影进入详情页的网址
    def get_movie_url(self,response):
        movie_url=response.xpath('//a[@class="ulink"][2]/@href').extract()
        for movie in movie_url:
            # 拼接完整的url
            movie='http://www.ygdy8.com'+movie
            yield scrapy.Request(url=movie,callback=self.get_content_in_url)
   # 获取每部电影的名字,以及他们的下载链接
    def get_content_in_url(self,response):
        mov_name=response.xpath('//div[@class="title_all"]/h1/font/text()').extract_first('')
        print(mov_name)
        mov_href=response.xpath('//td[@style="WORD-WRAP: break-word"]/a/@href').extract_first('')
        print(mov_href)
        print('------------------------------------------------------------')
        item=YanguangItem()
        item['mov_name']=mov_name
        item['mov_href']=mov_href
        yield item

4.items.py

import scrapy


class YanguangItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    mov_name=scrapy.Field()
    mov_href=scrapy.Field()
    pass

5.建立MySQL数据库和表格

打开MySQLWorkbench.exe,进入主界面创建数据和表格

这里我们创建一个名字为Movie的数据库,里面创建一个名字为movieTable的表格,有两个标题,name和href,注意更改为utf-8格式。

6.在Pipelines.py中自定义连接数据库,写入数据

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import  pymysql

class YanguangPipeline(object):
    def __init__(self):
        # 连接MySQL数据库
        self.connect=pymysql.connect(host='localhost',user='root',password='123456',db='Movie',port=3306)
        self.cursor=self.connect.cursor()
    def process_item(self, item, spider):
        # 往数据库里面写入数据
        self.cursor.execute('insert into movieTable(name,href)VALUES ("{}","{}")'.format(item['mov_name'],item['mov_href']))
        self.connect.commit()
        return item
    # 关闭数据库
    def close_spider(self,spider):
        self.cursor.close()
        self.connect.close()

7.完成后,在终端输入命令scrapy crawl movie

点击红色的圈刷新一下,出现如图所示的数据,便算是存储数据成功。

将数据存储到MySQL数据库中实际和sqlite3数据库的操作相差不大,只要用心练习,很快便能熟练掌握。

 

  • 16
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay丶萧邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值