Python 网络爬虫5 ---- 第一次实现抓取数据并且存放到mysql数据库中

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:    1 如果没有看过scrapy的朋友,可以到scrapy的官网看一下再来看这篇文章         2 创建一个scrapy的项目,请看http://blog.


   1 如果没有看过scrapy的朋友,可以到scrapy的官网看一下再来看这篇文章

    

   2 创建一个scrapy的项目,请看http://blog.csdn.net/chenguolinblog/article/details/19699865


   3 下面我们就一个一个文件的来分析,最后我会给出GitHub上面的源码

  

(1)第一个文件 spidr.py,这个文件的作用就是我们自己定义的蜘蛛,用来爬取网页的,具体看以下的注释

__author__ = 'chenguolin'
"""
Date: 2014-03-06
"""

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule        #这个是预定义的蜘蛛,使用它可以自定义爬取链接的规则rule
from scrapy.selector import HtmlXPathSelector               #导入HtmlXPathSelector进行解析
from firstScrapy.items import FirstscrapyItem

class firstScrapy(CrawlSpider):
    name = "firstScrapy"                                    #爬虫的名字要唯一
    allowed_domains = ["yuedu.baidu.com"]                   #运行爬取的网页
    start_urls = ["http://yuedu.baidu.com/book/list/0?od=0&show=1&pn=0"]   #第一个爬取的网页
    #以下定义了两个规则,第一个是当前要解析的网页,回调函数是myparse;第二个则是抓取到下一页链接的时候,不需要回调直接跳转
    rules = [Rule(SgmlLinkExtractor(allow=('/ebook/[^/]+fr=booklist')), callback='myparse'),
             Rule(SgmlLinkExtractor(allow=('/book/list/[^/]+pn=[^/]+', )), follow=True)]

    #回调函数
    def myparse(self, response):
        x = HtmlXPathSelector(response)
        item = FirstscrapyItem()

        # get item
        item['link'] = response.url
        item['title'] = ""
        strlist = x.select("//h1/@title").extract()
        if len(strlist) > 0:
            item['title'] = strlist[0]
        # return the item
        return item




(2)第二个文件是items.py,定义我们所需要的字段,因为我们这边只抓取图书的“名字”和“链接“,于是字段都是str

from scrapy.item import Item, Field

class FirstscrapyItem(Item):
    title = Field(serializer=str)
    link = Field(serializer=str)


 
(3) 第三个文件是pipelines.py,由于要连接数据库,这边用到了twisted连接mysql的方法

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

from twisted.enterprise import adbapi              #导入twisted的包
import MySQLdb
import MySQLdb.cursors

class FirstscrapyPipeline(object):
    def __init__(self):                            #初始化连接mysql的数据库相关信息
        self.dbpool = adbapi.ConnectionPool('MySQLdb',
                db = 'bookInfo',
                user = 'root',
                passwd = '123456',
                cursorclass = MySQLdb.cursors.DictCursor,
                charset = 'utf8',
                use_unicode = False
        )

    # pipeline dafault function                    #这个函数是pipeline默认调用的函数
    def process_item(self, item, spider):
        query = self.dbpool.runInteraction(self._conditional_insert, item)
        return item

    # insert the data to databases                 #把数据插入到数据库中
    def _conditional_insert(self, tx, item):
        sql = "insert into book values (%s, %s)"
        tx.execute(sql, (item["title"], item["link"]))



(4)在unbuntu下mysql的可视化工具截图

   


(5)大家可以从我的github上面直接clone项目,地址:https://github.com/chenguolin/firstScrapyProject.git


     ==================================

     ==      from:陈国林                                        ==

     ==      email:cgl1079743846@gmail.com     ==

     ==      转载请注明出处,谢谢!                        ==

     ==================================



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2天前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
19 1
|
2天前
|
数据采集 存储 C#
C# 爬虫技术:京东视频内容抓取的实战案例分析
C# 爬虫技术:京东视频内容抓取的实战案例分析
|
2天前
|
SQL 存储 缓存
MySQL是如何保证数据不丢失的?
文章详细阐述了InnoDB存储引擎中Buffer Pool与DML操作的关系。在执行插入、更新或删除操作时,InnoDB为了减少磁盘I/O,会在Buffer Pool中缓存数据页进行操作,随后将更新后的“脏页”刷新至磁盘。为防止服务宕机导致数据丢失,InnoDB采用了日志先行(WAL)机制,通过将DML操作记录为Redo Log并异步刷新到磁盘,结合双写机制和合理的日志刷新策略,确保数据的持久性和一致性。尽管如此,仍需合理配置参数以平衡性能与数据安全性。
MySQL是如何保证数据不丢失的?
|
2天前
|
算法 Python
Python 中的数据抽象
【8月更文挑战第29天】
20 11
|
4天前
|
JSON JavaScript API
用Python编写小工具下载OSM路网数据
用Python编写小工具下载OSM路网数据
|
4天前
|
数据采集 存储 机器学习/深度学习
豆瓣评分7.6!Python大牛教你如何采集网络数据
网络数据采集大有所为。在大数据深入人心的时代,网络数据采集作为网络、数据库与机器学习等领域的交汇点,已经成为满足个性化网络数据需求的最佳实践。你在浏览器上看到的内容,大部分都可以通过编写Python 程序来获取。如果你可以通过程序获取数据,那么就可以把数据存储到数据库里。如果你可以把数据存储到数据库里,自然也就可以将这些数据可视化。 今天给小伙伴们分享的这份手册采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。
|
3天前
|
数据可视化 前端开发 JavaScript
利用Python开发七普数据在线可视化看板
利用Python开发七普数据在线可视化看板
|
3天前
|
SQL 关系型数据库 MySQL
Python之MySQL操作及Paramiko模块操作
Python之MySQL操作及Paramiko模块操作
|
2天前
|
JSON 数据格式 Python
Python快速获取国内最新放假安排数据
Python快速获取国内最新放假安排数据
|
2天前
|
存储 数据可视化 Python
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
使用python moviepy提取视频中的音频,同时对音频数据进行数据可视化分析
6 0

热门文章

最新文章

下一篇
云函数