scrapy框架爬取数据入库(附详细介绍)
2018-03-19 16:20
302 查看
在论坛上看过很多的scrapy数据入库(mysql)的例子,但是我尝试之后总是出现一些莫名其妙的错误,搞得自己走了很多弯路,于是我将我认为是最简单易懂的方法和代码展示给大家,欢迎大家吐槽
1.创建scrapy项目(安装scrapy框架和mysql数据库就不在这讨论了,论坛上也有很多),在这里我创建的项目名称是“testmysql”,命令(cmd)是“scrapy startproject testmysql”,最好是在你想要创建项目的目录里面创建,创建好后,会看到如下文件2.创建spider文件,CD命令到testmysql文件夹(上图的第一个testmysql文件夹)下,输入命令(scrapy genspider yingyeyuan cs.58.com/yingyeyuan/)(这里你也可以手动增加该文件),然后就会看到有一个yinyeyuan.py的文件生成,好了,之后就在这里面写爬虫代码吧!
3.开始编写spider ,我爬的是58同城上的营业员相关的职业,所以第二步要在代码里面写 “cs.58.com/yingyeyuan/”,然后将页面的标题,工资,福利,公司名称,代码如下:# -*- coding: utf-8 -*-
import scrapy
class YinyeyuanSpider(scrapy.Spider):
name = 'yingyeyuan'
# allowed_domains = ['http://cs.58.com/yingyeyuan/']
start_urls = ['http://cs.58.com/yingyeyuan/']
def parse(self, response):
# 获取标题
title = response.xpath(".//*[@id='list_con']/li/div[1]/div[1]/a/span[2]/text()").extract()
# 获取公司名称
comname = response.xpath(".//*[@id='list_con']/li/div[2]/div/a/text()").extract()
# 获取工资
money = response.xpath(".//*[@id='list_con']/li/div[1]/p/text()").extract()
# 获取福利
getfree = response.xpath(".//*[@id='list_con']/li/div[1]/div[2]/span[1]/text()").extract()4.将得到的数据保存到items中去,所以要讲items.py导入到此文件中来(比上面多了几行代码而已),注意,最下面的yield语句一定要有,这个地方害我走了很多弯路,就这一句代码,
:# -*- coding: utf-8 -*-
import scrapy
from ..items import TestmysqlItem
class YinyeyuanSpider(scrapy.Spider):
name = 'yingyeyuan'
# allowed_domains = ['http://cs.58.com/yingyeyuan/']
start_urls = ['http://cs.58.com/yingyeyuan/']
def parse(self, response):
# 获取标题
title = response.xpath(".//*[@id='list_con']/li/div[1]/div[1]/a/span[2]/text()").extract()
# 获取公司名称
comname = response.xpath(".//*[@id='list_con']/li/div[2]/div/a/text()").extract()
# 获取工资
money = response.xpath(".//*[@id='list_con']/li/div[1]/p/text()").extract()
# 获取福利
getfree = response.xpath(".//*[@id='list_con']/li/div[1]/div[2]/span[1]/text()").extract()
# 实例化TongchengItem类
tongcheng = TestmysqlItem()
# 存入items
tongcheng["title"] = title
tongcheng["comname"] = comname
tongcheng["money"] = money
tongcheng["getfree"] = getfree
yield tongcheng
5.到了这步,就可以开始编写入库代码了,找到项目目录下的pipelines.py文件:
输入如下代码,我是存入mysql数据库,具体根据你的数据库来(解释:__init__函数里面初始化时就连接数据库,这样会方便很多,毕竟增删改查都要用到这些代码,同时输出下,确保程序运行到这里。process_items函数就是入库的操作,items由于是所有的数据的集合,所以要循环执行,try 语句确保入库成功,不成功就返回错误原因):import pymysql
class TestmysqlPipeline(object):
def __init__(self):
# connection database
self.connect = pymysql.connect('localhost','root','root','tongcheng',use_unicode=True,charset='utf8')
# get cursor
self.cursor = self.connect.cursor()
print("connecting mysql success!")
def process_item(self, item, spider):
print("start writing datas...")
try:
for i in range(0,len(item['title'])):
# insert data
sqlstr = "insert into zhaoping(title,companyname,getfree,money) VALUES('%s','%s','%s','%s')"%(item['title'][i],item['comname'][i],item['getfree'][i],item['money'][i])
self.cursor.execute(sqlstr)
self.connect.commit()
self.connect.close()
except Exception as error:
# print error
print(error)
return item6.修改settings.py文件,如果不修改,程序就不会知道你要执行哪个操作,默认情况下,它被注释了,去掉注释就好(300其实就是个执行顺序,越小执行越优先):# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = {
'testmysql.pipelines.TestmysqlPipeline': 300,
}7.试试看,输入命令“scarpy crawl yingyeyuan”,再去看看数据库,是不是很神奇啊?(大神勿喷)
相关文章推荐
- Scrapy:Python3版本上安装数据挖掘必备的scrapy框架详细攻略(一)——Jason niu
- Scrapy:Python3版本上安装数据挖掘必备的scrapy框架详细攻略(二最完整爬取网页内容信息攻略)——Jason niu
- fputc,fgetc,fputs,fgets,fwrite,fread写入或读取数据文件详细介绍
- Python基本数据类型详细介绍(转)
- 通用存取不同数据库数据dotConnect Universal 控件详细介绍
- Python各数据类型详细功能介绍
- 用 Scrapy+Mariadb 实现汉典数据爬虫(二)——Scrapy简单介绍
- C语言中time_t数据类型详细介绍
- linux kernel 时钟框架详细介绍
- Java Annotation认知(包括框架图、详细介绍、示例说明)
- C#自定义数据详细介绍
- ECharts数据图表使用介绍 超详细
- 详细介绍ASP.NET页面间数据传递的使用方法
- 搜索引擎五:Scrapy抓取数据入库
- MFC多文档框架详细介绍
- 应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较(转)
- DDTUnit 数据驱动框架介绍及其在单元测试中的应用
- Android 常见的图片加载框架详细介绍
- ORACLE中的各种数据类型详细的介绍
- 全面介绍Android的MVVM框架 - 数据绑定