利用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
    评论
首先,我们需要搭建Scrapy环境。可以使用Anaconda进行安装,在Anaconda Prompt使用以下命令: ``` conda install scrapy ``` 接下来,我们需要创建一个新的Scrapy项目,可以在命令行使用以下命令: ``` scrapy startproject boss ``` 这将创建一个名为“boss”的新项目。 接下来,我们需要定义我们要的网站。在项目文件夹,创建一个名为“spiders”的文件夹,并在其创建一个名为“boss_spider.py”的Python文件。在该文件,我们需要编写虫代码。以下是一个简单的虫,boss直聘网站的数据: ```python import scrapy class BossSpider(scrapy.Spider): name = 'boss' allowed_domains = ['www.zhipin.com'] start_urls = ['https://www.zhipin.com/c101010100/?query=%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90&page=1'] def parse(self, response): for job in response.css('.job-list ul li'): yield { 'title': job.css('.job-title::text').get(), 'salary': job.css('.red::text').get(), 'location': job.css('.job-area::text').get(), 'experience': job.css('.job-pub-time::text').get(), 'education': job.css('.job-pub-time::text').get(), 'company': job.css('.company-text .name::text').get(), 'industry': job.css('.company-text p::text').get(), } next_page = response.css('.page a.next::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 在上述代码,我们首先定义了一个名为“BossSpider”的类,该类继承了Scrapy的Spider类。在该类,我们定义了要的网站域名和起始URL。在parse()函数,我们使用CSS选择器来选择所需数据并将其存储到字典。然后,我们使用response.follow()方法来跟随下一页链接并继续数据。 接下来,我们需要将数据存储到MySQL数据库。我们可以使用Pythonmysql-connector库来实现这一点。以下是一个简单的代码示例: ```python import mysql.connector class BossPipeline: def __init__(self): self.conn = mysql.connector.connect( user='root', password='password', host='localhost', database='boss' ) self.cursor = self.conn.cursor() def process_item(self, item, spider): sql = 'INSERT INTO jobs (title, salary, location, experience, education, company, industry) VALUES (%s, %s, %s, %s, %s, %s, %s)' values = ( item['title'], item['salary'], item['location'], item['experience'], item['education'], item['company'], item['industry'] ) self.cursor.execute(sql, values) self.conn.commit() return item def close_spider(self, spider): self.conn.close() ``` 在上述代码,我们定义了一个名为“BossPipeline”的类,该类是一个Scrapy管道。在该类,我们首先建立了一个MySQL连接,并在process_item()函数执行了INSERT语句以将数据存储到数据库。最后,在close_spider()函数关闭了MySQL连接。 要启用管道,请打开项目的“settings.py”文件,并添加以下代码: ```python ITEM_PIPELINES = { 'boss.pipelines.BossPipeline': 300, } ``` 在上述代码,我们将管道的优先级设置为300,以确保它在其他管道之前运行。 现在,我们可以在命令行运行以下命令来启动虫并将数据存储到MySQL数据库: ``` scrapy crawl boss ``` 以上是一个简单的boss直聘网站并将数据存储到MySQL数据库的流程和代码示例。但是需要注意的是,虫程序需要遵守网站的 robots.txt 规则,同时需要设置合理的请求头信息,以避免被封禁。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Jay丶萧邦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值