您的位置:首页 > 理论基础 > 计算机网络

基于Scrapy框架的python网络爬虫学习(3)

2016-07-21 11:09 417 查看

3.实战学习

数据慢慢变多之后,为了方便后续的分析处理,常常要用到数据库,因此我们需要将爬取的数据存入数据库中,最简单的方法就是将爬取的csv文件导入数据库。

修改pipelines.py中的代码,连接数据库并向数据库插入数据。之前写的关于编码部分的代码可以注释掉。这里使用的是Navicat for MySQL。下载与数据库连接的包步骤和刚开始安装scrapy一样简单。数据库的使用就不介绍了。

def __init__(self):
#初始化连接mysql的数据库相关信息
self.dbpool = adbapi.ConnectionPool(
dbapiName='MySQLdb',
host='211.87.229.254',
db = 'scrapy',
user='zhilian',
passwd='admin',
cursorclass = MySQLdb.cursors.DictCursor,
charset = 'utf8',
use_unicode = False
)
def process_item(self, item, spider):
query = self.dbpool.runInteraction(self._conditional_insert, item)
return item

def _conditional_insert(self, tx, item):
sql = 'insert into scrapy.testzhi(position,company,location,'+
'salary,time,number,welfare,scale,experien'+
'ce,education,description,namee) values'+
'(%s,%s,%s,%s,%s,%s,%s,%s,'+
'%s,%s,%s,%s)'

tx.execute(sql,(item['position'],item['company']
,item['location'],item['welfare'],
item['scale'],item['experience'],
item['education'],item['description'],
item['namee']))


不要忘记在数据库中建表,在scrapy数据库中建了一个testzhi表,下面是表中的各列。因为location和description的字数比较多,将它们类型设置为longtext



运行后刷新数据库会发现数据库出现了数据,但是只有很少的一些,命令行中也报错,仔细观察后发现,问题出在的格式上,因为item项是以list存储的,包含多项的list会有“,”,将这些list转换为String类型。



以welfare为例,很笨的方式。

wel = a1.xpath('div/span/text()').extract()
wel1=''
for w in wel:
wel1=w+'/'+wel1

item['welfare']=wel1


这样貌似解决了一部分问题,数据库里的数据还不是很完整有5115条。继续寻找解决方案。感觉算是可接受的误差?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: