scrapy实战8关于数据异步写入mysql:
环境:python3
爬取网址:腾讯社招(http://hr.tencent.com/position.php?keywords=&tid=0&start=0#a)总共2202条数据
pipelines.py
- from twisted.enterprise import adbapi
- import pymysql
- import pymysql.cursors
- class MysqlTwistedPipeline(object):
- def __init__(self,dbpool):
- self.dbpool=dbpool
- @classmethod
- def from_settings(cls,settings):
- 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,
- use_unicode=True)
- return cls(dbpool)
- def process_item(self,item,spider):
- # 使用twisted将mysql插入变成异步执行
- self.dbpool.runInteraction(self.do_insert,item)
- def do_insert(self,cursor,item):
- # 执行具体的插入
- # 根据不同的item 构建不同的sql语句并插入到mysql中
- insert_sql, params = item.get_insert_sql()
- cursor.execute(insert_sql, params)
items.py
- import scrapy
- class TencentItem(scrapy.Item):
- positionname=scrapy.Field()
- positionlink=scrapy.Field()
- positionType=scrapy.Field()
- positionNum=scrapy.Field()
- positionLocation=scrapy.Field()
- publishTime=scrapy.Field()
- def get_insert_sql(self):
- insert_sql="""
- insert into tencent(positionname,positionlink,positionType,positionNum,positionLocation,publishTime)
- VALUES (%s,%s,%s,%s,%s,%s)
- """
- params=(
- self['positionname'], self['positionlink'], self['positionType'], self['positionNum'],
- self['positionLocation'], self['publishTime']
- )
- return insert_sql,params
settings.py
- BOT_NAME = 'tencent'
- SPIDER_MODULES = ['tencent.spiders']
- NEWSPIDER_MODULE = 'tencent.spiders'
- ROBOTSTXT_OBEY = False
- (不用分布式可忽略下面三项)
- SCHEDULER = "scrapy_redis.scheduler.Scheduler"
- DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
- SCHEDULER_PERSIST = True
- DOWNLOAD_DELAY = 2
- DEFAULT_REQUEST_HEADERS = {
- 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:53.0) Gecko/20100101 Firefox/53.0',
- 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
- #'Accept-Language': 'en',
- }
- ITEM_PIPELINES = {
- 'scrapy_redis.pipelines.RedisPipeline':400,(不用分布式可忽略)
- 'tencent.pipelines.MysqlTwistedPipeline': 300,
- }
- REDIS_HOST = '172.21.118.56'(分布式主机ip 不用分布式可忽略)
- REDIS_PORT = 6379(不用分布式可忽略)
- MYSQL_HOST = "127.0.0.1"
- MYSQL_DBNAME = "tencent"(自己数据库名字)
- MYSQL_USER = "usrername"(用户名)
- MYSQL_PASSWORD = "userpassword"(密码)
spiders/Tencent.py
- from scrapy.linkextractors import LinkExtractor
- from scrapy.spiders import Rule
- from scrapy_redis.spiders import RedisCrawlSpider
- from tencent.items import TencentItem
- class TencentSpider(RedisCrawlSpider):
- name = "Tencent"
- allowed_domains = ["tencent.com"]
- redis_key = 'TencentSpider:start_urls'
- page_link=LinkExtractor(allow=(r"start=\d+"))
- rules=[
- Rule(page_link,callback = "parseContent",follow=True)
- ]
- def parseContent(self, response):
- list=response.xpath('//tr[@class="even"] | //tr[@class="odd"]')
- for infos in list:
- item=TencentItem()
- item['positionname']=infos.xpath("./td[1]/a/text()").extract()[0]
- item['positionlink']=infos.xpath("./td[1]/a/@href").extract()[0]
- item['positionType']=infos.xpath("./td[2]/text()").extract()
- item['positionNum']=infos.xpath("./td[3]/text()").extract()[0]
- item['positionLocation']=infos.xpath("./td[4]/text()").extract()[0]
- item['publishTime']=infos.xpath("./td[5]/text()").extract()[0]
- yield item
scrapy实战8关于数据异步写入mysql:的更多相关文章
- Scrapy爬取豆瓣图书数据并写入MySQL
项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6.Scrapy.Twisted.MySQLdb等 演示 代码 一.创建项目 ...
- Python+Scrapy+Crawlspider 爬取数据且存入MySQL数据库
1.Scrapy使用流程 1-1.使用Terminal终端创建工程,输入指令:scrapy startproject ProName 1-2.进入工程目录:cd ProName 1-3.创建爬虫文件( ...
- MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别
原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...
- HTTP协议与使用Python获取数据并写入MySQL
一.Http协议 二.Https协议 三.使用Python获取数据 (1)urlib (2)GET请求 (3)POST请求 四.爬取豆瓣电影实战 1.思路 (1)在浏览器中输入https://movi ...
- scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)
python版本 python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www. ...
- python scrapy 实战简书网站保存数据到mysql
1:创建项目 2:创建爬虫 3:编写start.py文件用于运行爬虫程序 # -*- coding:utf-8 -*- #作者: baikai #创建时间: 2018/12/14 14:09 #文件: ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- Scrapy实战篇(五)之爬取历史天气数据
本篇文章我们以抓取历史天气数据为例,简单说明数据抓取的两种方式: 1.一般简单或者较小量的数据需求,我们以requests(selenum)+beautiful的方式抓取数据 2.当我们需要的数据量较 ...
- Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL
上周六在深圳分享了<Flink SQL 1.9.0 技术内幕和最佳实践>,会后许多小伙伴对最后演示环节的 Demo 代码非常感兴趣,迫不及待地想尝试下,所以写了这篇文章分享下这份代码.希望 ...
随机推荐
- C++ Boost 学习资源列表
文档书籍下载 Boost Documentation Boost代码下载 优秀网站导航 Boost官方网站 Boost中文站 Boost Consulting 专题资源报告 Lin ...
- MVVMLight 实现指定Frame控件的导航
原文:MVVMLight 实现指定Frame控件的导航 在UWP开发中,利用汉堡菜单实现导航是常见的方法.汉堡菜单导航一般都需要新建一个Frame控件,并对其进行导航,但是在MvvmLight框架默认 ...
- 【C#】WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的
原文:[C#]WPF的xaml中定义的Trigger为什么有时候会不管用,如Border的MouseOver之类的 初学WPF,知道一些控件可以通过定义Style的Trigger改变要显示的样式,但是 ...
- swagger-editor
前言 上一篇文章我们有提到Swagger做接口的定义是采用yaml语言的,当然,yaml是个啥,大家自行百度.阿福在此不做赘述了.但是,今天我们要来讲的是yaml支持比较好的Swagger-Edito ...
- No module named import_export.admin Django python
主要是安装xadmin后出现错误 解决方案: pip install django-import-export 重启即可
- C# 获得设备usb信息
原文:C# 获得设备usb信息 本文告诉大家如何获得设备的usb来进行判断是否有哪些usb和找不到usb可能是什么. 需要在项目右击引用,点击程序集,搜索 System.Management 然后安装 ...
- 谷歌将为 Mac 和 Windows 用户推出新的备份和同步应用
据报道,谷歌将于 6 月 28 日面向 Mac 和 Windows 用户发布一款新的备份和同步应用(Backup and Sync app). Google 刚刚宣布将推出其备份和同步应用程序,该工具 ...
- java中==和equels的区别
起初接触java的时候这个问题还是比较迷茫的,最近上班之余刷博客的时候看了一些大神写的文章,自己也来总结一下,直接贴代码: package string; public class demo1 { p ...
- .Net 通过Cmd执行Adb命令 /c参数
通过cmd.exe来执行adb命令,可以进行一些命令组合,直接用adb.exe的话只能执行单个adb命令 这里要注意cmd 中的/c参数,指明此参数时,他将执行整个字符串中包含的命令并退出当前cmd运 ...
- SQL Server上唯一的数据库集群:负载均衡、读写分离、容灾(数据零丢失、服务高可用)
SQL Server上唯一的数据库集群:负载均衡.读写分离.容灾(数据零丢失.服务高可用).审计.优化,全面解决数据库用户问题.一键安装,易用稳定,性价比高,下载链接:http://www.zheti ...