环境:python3

爬取网址:腾讯社招(http://hr.tencent.com/position.php?keywords=&tid=0&start=0#a)总共2202条数据

pipelines.py

  1. from twisted.enterprise import adbapi
  2. import pymysql
  3. import pymysql.cursors
  4.  
  5. class MysqlTwistedPipeline(object):
  6. def __init__(self,dbpool):
  7. self.dbpool=dbpool
  8.  
  9. @classmethod
  10. def from_settings(cls,settings):
  11. dbpool=adbapi.ConnectionPool("pymysql",host=settings["MYSQL_HOST"],db=settings["MYSQL_DBNAME"],user=settings["MYSQL_USER"],password=settings["MYSQL_PASSWORD"],charset="utf8", cursorclass=pymysql.cursors.DictCursor,
  12. use_unicode=True)
  13. return cls(dbpool)
  14.  
  15. def process_item(self,item,spider):
  16. # 使用twisted将mysql插入变成异步执行
  17. self.dbpool.runInteraction(self.do_insert,item)
  18.  
  19. def do_insert(self,cursor,item):
  20. # 执行具体的插入
  21. # 根据不同的item 构建不同的sql语句并插入到mysql中
  22. insert_sql, params = item.get_insert_sql()
  23. cursor.execute(insert_sql, params)

items.py

  1. import scrapy
  2.  
  3. class TencentItem(scrapy.Item):
  4.  
  5. positionname=scrapy.Field()
  6. positionlink=scrapy.Field()
  7. positionType=scrapy.Field()
  8. positionNum=scrapy.Field()
  9. positionLocation=scrapy.Field()
  10. publishTime=scrapy.Field()
  11.  
  12. def get_insert_sql(self):
  13. insert_sql="""
  14. insert into tencent(positionname,positionlink,positionType,positionNum,positionLocation,publishTime)
  15. VALUES (%s,%s,%s,%s,%s,%s)
  16.  
  17. """
  18. params=(
  19. self['positionname'], self['positionlink'], self['positionType'], self['positionNum'],
  20. self['positionLocation'], self['publishTime']
  21. )
  22. return insert_sql,params

settings.py

  1. BOT_NAME = 'tencent'
  2.  
  3. SPIDER_MODULES = ['tencent.spiders']
  4. NEWSPIDER_MODULE = 'tencent.spiders'
  5.  
  6. ROBOTSTXT_OBEY = False
  7.  
  8. (不用分布式可忽略下面三项)
  9. SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  10. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  11. SCHEDULER_PERSIST = True
  12.  
  13. DOWNLOAD_DELAY = 2
  14.  
  15. DEFAULT_REQUEST_HEADERS = {
  16. 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0',
  17. 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  18. #'Accept-Language': 'en',
  19. }
  20.  
  21. ITEM_PIPELINES = {
  22. 'scrapy_redis.pipelines.RedisPipeline':400,(不用分布式可忽略)
  23. 'tencent.pipelines.MysqlTwistedPipeline': 300,
  24. }
  25. REDIS_HOST = '172.21.118.56'(分布式主机ip 不用分布式可忽略)
  26. REDIS_PORT = 6379(不用分布式可忽略)
  27.  
  28. MYSQL_HOST = "127.0.0.1"
  29. MYSQL_DBNAME = "tencent"(自己数据库名字)
  30. MYSQL_USER = "usrername"(用户名)
  31. MYSQL_PASSWORD = "userpassword"(密码)

spiders/Tencent.py

  1. from scrapy.linkextractors import LinkExtractor
  2. from scrapy.spiders import Rule
  3. from scrapy_redis.spiders import RedisCrawlSpider
  4. from tencent.items import TencentItem
  5.  
  6. class TencentSpider(RedisCrawlSpider):
  7. name = "Tencent"
  8. allowed_domains = ["tencent.com"]
  9. redis_key = 'TencentSpider:start_urls'
  10.  
  11. page_link=LinkExtractor(allow=(r"start=\d+"))
  12.  
  13. rules=[
  14. Rule(page_link,callback = "parseContent",follow=True)
  15. ]
  16.  
  17. def parseContent(self, response):
  18. list=response.xpath('//tr[@class="even"] | //tr[@class="odd"]')
  19. for infos in list:
  20. item=TencentItem()
  21. item['positionname']=infos.xpath("./td[1]/a/text()").extract()[0]
  22. item['positionlink']=infos.xpath("./td[1]/a/@href").extract()[0]
  23. item['positionType']=infos.xpath("./td[2]/text()").extract()
  24. item['positionNum']=infos.xpath("./td[3]/text()").extract()[0]
  25. item['positionLocation']=infos.xpath("./td[4]/text()").extract()[0]
  26. item['publishTime']=infos.xpath("./td[5]/text()").extract()[0]
  27.  
  28. yield item

scrapy实战8关于数据异步写入mysql:的更多相关文章

  1. Scrapy爬取豆瓣图书数据并写入MySQL

    项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...

  2. Python+Scrapy+Crawlspider 爬取数据且存入MySQL数据库

    1.Scrapy使用流程 1-1.使用Terminal终端创建工程,输入指令:scrapy startproject ProName 1-2.进入工程目录:cd ProName 1-3.创建爬虫文件( ...

  3. MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别

    原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...

  4. HTTP协议与使用Python获取数据并写入MySQL

    一.Http协议 二.Https协议 三.使用Python获取数据 (1)urlib (2)GET请求 (3)POST请求 四.爬取豆瓣电影实战 1.思路 (1)在浏览器中输入https://movi ...

  5. scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)

      python版本  python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www. ...

  6. python scrapy 实战简书网站保存数据到mysql

    1:创建项目 2:创建爬虫 3:编写start.py文件用于运行爬虫程序 # -*- coding:utf-8 -*- #作者: baikai #创建时间: 2018/12/14 14:09 #文件: ...

  7. Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)

    1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...

  8. Scrapy实战篇(五)之爬取历史天气数据

    本篇文章我们以抓取历史天气数据为例,简单说明数据抓取的两种方式: 1.一般简单或者较小量的数据需求,我们以requests(selenum)+beautiful的方式抓取数据 2.当我们需要的数据量较 ...

  9. Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL

    上周六在深圳分享了<Flink SQL 1.9.0 技术内幕和最佳实践>,会后许多小伙伴对最后演示环节的 Demo 代码非常感兴趣,迫不及待地想尝试下,所以写了这篇文章分享下这份代码.希望 ...

随机推荐

  1. C++ Boost 学习资源列表

    文档书籍下载 Boost Documentation Boost代码下载       优秀网站导航 Boost官方网站 Boost中文站 Boost Consulting     专题资源报告 Lin ...

  2. MVVMLight 实现指定Frame控件的导航

    原文:MVVMLight 实现指定Frame控件的导航 在UWP开发中,利用汉堡菜单实现导航是常见的方法.汉堡菜单导航一般都需要新建一个Frame控件,并对其进行导航,但是在MvvmLight框架默认 ...

  3. 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的

    原文:[C#]WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的 初学WPF,知道一些控件可以通过定义Style的Trigger改变要显示的样式,但是 ...

  4. swagger-editor

    前言 上一篇文章我们有提到Swagger做接口的定义是采用yaml语言的,当然,yaml是个啥,大家自行百度.阿福在此不做赘述了.但是,今天我们要来讲的是yaml支持比较好的Swagger-Edito ...

  5. No module named import_export.admin Django python

    主要是安装xadmin后出现错误 解决方案: pip install django-import-export 重启即可

  6. C# 获得设备usb信息

    原文:C# 获得设备usb信息 本文告诉大家如何获得设备的usb来进行判断是否有哪些usb和找不到usb可能是什么. 需要在项目右击引用,点击程序集,搜索 System.Management 然后安装 ...

  7. 谷歌将为 Mac 和 Windows 用户推出新的备份和同步应用

    据报道,谷歌将于 6 月 28 日面向 Mac 和 Windows 用户发布一款新的备份和同步应用(Backup and Sync app). Google 刚刚宣布将推出其备份和同步应用程序,该工具 ...

  8. java中==和equels的区别

    起初接触java的时候这个问题还是比较迷茫的,最近上班之余刷博客的时候看了一些大神写的文章,自己也来总结一下,直接贴代码: package string; public class demo1 { p ...

  9. .Net 通过Cmd执行Adb命令 /c参数

    通过cmd.exe来执行adb命令,可以进行一些命令组合,直接用adb.exe的话只能执行单个adb命令 这里要注意cmd 中的/c参数,指明此参数时,他将执行整个字符串中包含的命令并退出当前cmd运 ...

  10. SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)

    SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...