scrapy爬虫框架简单Demo
github地址:
https://github.com/lawlite19/PythonCrawler-Scrapy-Mysql-File-Template
使用scrapy爬虫框架将数据保存Mysql数据库和文件中
settings.py
修改Mysql的配置信息
MYSQL_HOST =
'127.0.0.1'
MYSQL_DBNAME =
'testdb'
MYSQL_USER =
'root'
MYSQL_PASSWD =
'123456'
MYSQL_PORT =
3306
指定pipelines
ITEM_PIPELINES = {
'webCrawler_scrapy.pipelines.WebcrawlerScrapyPipeline': 300,
'webCrawler_scrapy.pipelines.JsonWithEncodingPipeline': 300,
items.py
声明需要格式化处理的字段
class WebcrawlerScrapyItem(scrapy.Item):
'''定义需要格式化的内容(或是需要保存到数据库的字段)'''
name = scrapy.Field()
url = scrapy.Field()
pipelines.py
一、保存到数据库的类WebcrawlerScrapyPipeline
(在settings中声明)
定义一个类方法from_settings
,得到settings中的Mysql数据库配置信息,得到数据库连接池dbpool
@classmethod
def from_settings(cls,settings):
'''1、@classmethod声明一个类方法,而对于平常我们见到的则叫做实例方法。
2、类方法的第一个参数cls(class的缩写,指这个类本身),而实例方法的第一个参数是self,表示该类的一个实例
3、可以通过类来调用,就像C.f(),相当于java中的静态方法'''
dbparams=dict(
host=settings['MYSQL_HOST'],
db=settings['MYSQL_DBNAME'],
user=settings['MYSQL_USER'],
passwd=settings['MYSQL_PASSWD'],
charset='utf8',
cursorclass=MySQLdb.cursors.DictCursor,
use_unicode=False,
dbpool=adbapi.ConnectionPool('MySQLdb',**dbparams)
return cls(dbpool)
__init__
中会得到连接池dbpool
def process_item(self, item, spider):
query=self.dbpool.runInteraction(self._conditional_insert,item)
query.addErrback(self._handle_error,item,spider)
return item
插入数据库方法_conditional_insert
def _conditional_insert(self,tx,item):
sql="insert into testpictures(name,url) values(%s,%s)"
params=(item["name"],item["url"])
tx.execute(sql,params)
错误处理方法
_handle_error
2、在自己实现的爬虫类中yield item,会自动执行'''
def
__init__
(self)
:
self.file = codecs.open(
'info.json'
,
'w'
, encoding=
'utf-8'
)
def
process_item
(self, item, spider)
:
line = json.dumps(dict(item)) +
"\n"
self.file.write(line)
return
item
def
spider_closed
(self, spider)
:
self.file.close()
dbhelper.py
自己实现的操作Mysql数据库的类
init
方法,获取settings配置文件中的信息
self
.settings=get_project_settings()
self
.host=
self
.settings[
'MYSQL_HOST'
]
self
.port=
self
.settings[
'MYSQL_PORT'
]
self
.user=
self
.settings[
'MYSQL_USER'
]
self
.passwd=
self
.settings[
'MYSQL_PASSWD'
]
self
.db=
self
.settings[
'MYSQL_DBNAME'
]
连接到Mysql
def connectDatabase(self):
conn=MySQLdb.connect(host=self.host,
port=self.port,
user=self.user,
passwd=self.passwd,
db=self.db,
charset='utf8')
return conn
创建数据库(settings文件中配置的数据库名)
def createDatabase(self):
'''因为创建数据库直接修改settings中的配置MYSQL_DBNAME即可,所以就不要传sql语句了'''
conn=self.connectMysql()
sql="create database if not exists "+self.db
cur=conn.cursor()
cur.execute(sql)
cur.close()
conn.close()
还有一些数据库操作方法传入sql语句和参数即可(具体看代码)
name="webCrawler_scrapy"
allowed_domains=["desk.zol.com.cn"]
start_urls=["http://desk.zol.com.cn/fengjing/1920x1080/1.html"]
实现
parse
方法,该函数名不能改变,因为Scrapy源码中默认callback函数的函数名就是parse
item=WebcrawlerScrapyItem()
item['name']=file_name
item['url']=realUrl
print item["name"],item["url"]
yield item
测试DBHelper
创建testdb数据库和testtable表
scrapy crawl webCrawler_scrapy
运行爬虫后会将爬取得图片保存到本地,并且将name和url保存到数据库中
写这篇文章的原因是因为牛人们总结的scrapy爬虫效果都很厉害的样子(http://www.bjhee.com/scrapy.html和https://segmentfault.com/a...
来自:
编程之蛙
作为一位对联盟游戏的爱好者,学习爬虫的时候也以这款游戏作为对象。这个项目使用的python版本:3.6.0,scrapy使用的版本:1.11。参照这篇博客即便是不会爬虫的小白也可以带你做出一个完整的s...
来自:
AI吕小布
之前一篇文章,写了scrapy入门博客。至于数据库建表也不再赘述。接下来介绍如何将数据进行mysql入库。
其实很简单,数据源都拿到了,入库就是信手拈来,着重介绍利用pymysql连接mysql数...
来自:
harry5508的博客
本章将讲述爬取IP地址,为后期深入爬虫做准备1.准备工作分析一下我们要抓取那些字段和网页的结构,我们要抓取的是ip地址,端口,服务器地址,速度,存活时间等查看一下网页的结构可以看到要抓取的内容主要在t...
来自:
moon的博客
上篇博客使用scrapy框架爬取豆瓣电影top250信息将各种信息通过json存在文件中,不过对数据的进一步使用显然放在数据库中更加方便,这里将数据存入mysql数据库以便以后利用。
运行环境: 1...
来自:
ljm_9615的博客
我定义好items后,下一步是要将items这个容器引入到我的spider里面。所以要在spider文件中写上这么一句话:
from house.items import Test1It...
来自:
memoryjdch的博客
python3使用scrapy获取数据然后保存至MySQL数据库,我上一篇写了如何爬取数据保存为csv文件,这一篇将会写如何将数据保存至数据库。
思路大都一样,我列一个思路:
1:获取腾讯招聘网。...
来自:
昆兰.沃斯 的博客
1.cmd 命令行 pip install pymysql,pip install lxml,pip install requests
2.创建scrapy项目并进行MySQ...
来自:
SunChao3555的博客
前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的。这很显然不满足我...
来自:
纸上得来终觉浅
最近重新了系统,导致原先的scrapy不能用,出现了各种问题:
Python: Windows下pip安装库出错:Microsoft Visual C++ 9.0 is required...
来自:
chang___hong的专栏
为了学习机器学习深度学习和文本挖掘方面的知识,需要获取一定的数据,新浪微博的大量数据可以作为此次研究历程的对象
一、环境准备python 2.7
scrapy框架的部署(可以查看上一篇博客的简要操作...
来自:
Fitz的博客
有很多数据库符合Python Database API规范2.0,例如MySQL,PostgreSQL,Orcale,Microsoft SQL Server和SQLite。它们的驱动是很复杂的并且经...
爬取的网页是 http://www.poi86.com/poi/amap/district/331002/1.html 验证的元素是圈出来的。 用谷歌浏览器自带的工具copyxpath的 respon
比如,抓取淘宝商家信息存到商家信息表中,淘宝宝贝再存入宝贝表中?如何实现啊啊啊啊啊!!!!?
还有scrapy怎么破解图片验证码/?
现在已知可以用云打码平台来实现,可是云打码识别出图片中的验证码知乎...
来自:
xiaomoxian567的博客
抓取目标网址:https://www.cn357.com/notice_300;https://www.cn357.com/notice_191
由于该网站没有设置反爬,所以直接干!
需要抓取的数...
来自:
xiaosongshupy的博客
这里的爬虫代码是基于第一个爬虫程序【重写第一个爬虫程序】,由于是python3.6.4,所以不能使用mysqldb,那就采用pymysql。
一、安装并测试pymysql
pip install py...
来自:
Martian
在论坛上看过很多的scrapy数据入库(mysql)的例子,但是我尝试之后总是出现一些莫名其妙的错误,搞得自己走了很多弯路,于是我将我认为是最简单易懂的方法和代码展示给大家,欢迎大家吐槽1.创建scr...
来自:
CosCXY的博客
今天我们利用scrapy框架爬取数据,然后将数据储存到MySQL中,话不多说,今天我们爬取的网页是:http://www.ygdy8.com,我们要获取经典电影分类中的国内电影,日韩电影,欧美电影三个...
来自:
十一月的萧邦
爬虫Scrapy 数据库的配置mysql(pymysql) #进入pipelines.py文件#首先导入pymysql import pymysql class SqkPipeline(object...
来自:
xuanyugang的博客
1、使用pip install scrapy 安装scrapy2、打开cmd命令行窗口,创建属于自己的爬虫项目工程。命令:scrapy startproject First3、通过步骤2爬虫工程已经创...
来自:
Cludy Sky的博客
首先本文是基于win7操作系统,并且配置好scrapy的运行环境,采用Python语言编写的(前面有疑问的请先Google,百度 ,拒绝伸手党)
1.假设你已经配置好scrapy的运行环境,这里...
来自:
我也想当个菜鸡
单纯使用request库进行爬虫,将数据存入MySQL的方法如下第一步:从Navicat进入创建数据库(articles),数据表(info)第二步:定义函数import pymysqldef sav...
来自:
西门大盗的博客
python3简单爬虫并存入mysql数据库
网络爬虫是一种高效的信息采集器,利用它可以快速、准确地采集我们想要的各种的数据资源。因此,可以说,网络爬虫技术几乎已成为大数据时代IT从业时代的必修课程...
来自:
Air_RA的博客
python2.7,把爬下来的数据写入了mysql建立的一个表中,大概有几万条数据 现在想再写一个GUI界面,能够把数据库表中的数据,通过各种条件查询出来,供用户查看结果 把GUI查询界面完成后,如何
最近在研究Scrapy,写了一个爬虫,爬去链家数据。但在将爬去的数据保存到数据库的时候发生数据丢失,为此我用了两种方式保存爬去的数据:1.写文本文件。 2 : 保存到SQLSERVER数据库,运行完之
大家好,这是我的第一篇博客,写的不好请见谅。小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息。...
来自:
qq_41532599的博客
根据上一篇文章我们已经成功的爬取到了租房网站房屋信息,接下来就是着手将数据存入数据库了,这里,我们采用MySQL数据库
编写数据库工具类
SQLAlchemy是一款适用于Python的非常好用的O...
来自:
星星之火,可以燎原
首先安装mysqlclient包,推荐使用豆瓣源安装,速度不仅快,还不容易出错。
pip install -i https://pypi.douban.com/simple/ mysqlclie...
来自:
Fitz的博客
数据库的异步写入
scrapy爬虫框架里数据库的异步写入与同步写入在代码上的区别也就在pipelines.py文件和settings.py问价的区别,其他的都是一样的。本文就介绍一下pipeli...
来自:
zhouls007的博客
还记得去年在北京安博会上,看到一些厂家的展示台上,各种船舶、公路、车辆的高清视频直播,好奇这些数据是怎么接到现场的,现场成百上千家展台,不可能有那么大的带宽供应,细想数据肯定不是实时的,果然,盯着看了...
来自:
Babosa的专栏
开发ArcGIS Online应用程序模板之前,需要了解怎么使用ArcGIS API for JavaScript。
在ArcGIS Online当中如何构架自己的应用程序模板,我们得先要了...
来自:
ArcGIS产品与技术专栏
下载安装JDK并配置环境变量
这里我下载安装的是jdk-7u51-windows-i586,如果你没有请到Oracle官网下载;
【我的电脑】-【高级系统设置】-【环境变量】-系统变量中的Path添加...
来自:
hankaibo
在处理数据过程中,常会遇到将一条数据拆分成多条,比如一个人的地址信息中,可能有多条地址,既有家庭地址也有工作地址,还有电话信息等等类似的情况,实际使用数据的时候又需要分开处理,这个时候就需要将这一条数...
来自:
dongcheng 的博客
对于J2EE项目导入导出Excel是最普通和实用功能,本工具类使用步骤简单,功能强大,只需要对实体类进行简单的注解就能实现导入导出功能,导入导出操作的都是实体对象.
请看一下这个类都有哪些功能:
来自:
李坤 大米时代 第五期
因为公司有个项目有webapp的需求,在前期准备的期间考虑过使用ionic,毕竟该项目web端的框架使用的是Angular,项目组的人也都比较熟悉,但是我们毕竟只是做个移动的网页,不想用ionic那么...
来自:
zhangl的博客
1、问题症状描述
最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这...
来自:
Mr_Alex
Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的Thread...
来自:
u011860731的专栏
本篇文章是根据我的上篇博客,给出的改进版,由于时间有限,仅做了一个简单的优化。相关文章:将excel导入数据库2018年4月1日,新增下载地址链接:点击打开源码下载地址十分抱歉,这个链接地址没有在这篇...
来自:
Lynn_Blog
以前使用qq邮箱、163服务器发送邮件,帐号直接使用密码,现在不行了,得使用授权码,简单记录下
1、首先开通POP3/SMTP服务,qq邮箱——帐号——设置,找到POP3/SMTP点开启,输入短信会有...
来自:
爱代码也爱生活
目前在Android开发中,开源的网络请求框架有Android-async-http ,Volley,Okhttp等,这几种框架都是市面上主流的,每种都有各自的优点。今天主要来看看Okhttp。之前...
来自:
zhangxiaowei
nginx是个好东西,Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl...
来自:
maoyuanming0806的博客
问题场景描述整个项目通过Maven构建,大致结构如下:
核心Spring框架一个module spring-boot-base
service和dao一个module server-core
提供系统...
来自:
开发随笔
最近一直在准备面试,为了使自己的Java水平更上一个档次,拜读了李林峰老师的《Netty权威指南》,了解了Java关于IO的发展和最新的技术,真是受益匪浅,现在把我总结的关于BIO、NIO和AIO的区...
来自:
我的编程世界
如下图所示,蜂窝小区,以1为中心,顺时针编号,编号最大限定为100000。求任意两编号之间的最短距离。两个相邻小区的距离为1 示例:19到30的最短距离为5 实现如下三个接口: /**********...
来自:
NYS001的专栏
错误类型及描述:
expdp 导出表在表分析是开始出现报错。
ORA-39127: unexpected error from call to export_string :=SYS.DBMS_A...
[Python]使用Scrapy爬...
weixin_40662312:
IOError: [Errno socket error] [Errno 11001] getaddrinfo failed
机器学习(三):逻辑回归应用_手写...
qq_37469432:
请问displa_array 那行的定义为什么那么写呢