Python进阶(博主前面写过一篇基础的scrapy,刚学的同学可以去看看)

用scrapy框架爬取游戏信息,并将这些游戏信息插入MySQL中。

话不多说直接撸代码

scrapy框架搭建过程

1、同样是先建立工程

scrapy startproject gamerank

2、写spider文件,建立文件gamerank.py,代码如下:

上面的第32行代码是博主后面做了一点小的更改

item["status"]=each_ga.xpath('./td[@class="static"]/span/text()

改为了

item["status"]=each_ga.xpath('./td[@class="static"]/span/text() | ./td[@class="time time1"]/div[@class="t"]/text()').extract()[0]

本来爬得好好地但是被网站的后台或者是维护人员摆了一道,我不得不做下更改,具体情况请看:

惊不惊喜,意不意外,对,该后台人员可能是为了防止爬虫在游戏状态这加了一个08-04 10:00我惊了

所以以后写爬虫一定要注意也许今天能爬取数据,明天就不能了,先不要怀疑人生,直接怀疑网站搞怪。

3、编写item文件

import scrapyclass GamerankItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field()

#游戏的排名 rank=scrapy.Field()

#游戏的名字 game=scrapy.Field()

#游戏的类型 type=scrapy.Field()

#游戏的状态 status=scrapy.Field()

#游戏的热度 hot=scrapy.Field()

4、编写pipelines文件

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql

####注意一定要导入配置,因为数据库的一些连接信息写在settings文件里的
#此类是把信息写入文档,写入时末尾都加了一个逗号,是为了数据的观看与直观性
#也方便以后用mysql语言直接导入数据
from scrapy.conf import settings

# class GamerankPipeline(object):
# def process_item(self, item, spider):
# with open('games_list.txt','a',encoding='utf-8') as f:
# f.write(item['rank']+',')
# f.write(item['game']+',')
# f.write(item['type']+',')
# f.write(item['status']+',')
# f.write(item['hot'])
# f.write('\n')


#下面是将爬取到的信息插入到MySQL数据库中
class Gamerank_Pipeline(object):
def process_item(self, item, spider):
host = settings['MYSQL_HOSTS']
user = settings['MYSQL_USER']
psd = settings['MYSQL_PASSWORD']
db = settings['MYSQL_DB']
c=settings['CHARSET']
port=settings['MYSQL_PORT']
#数据库连接
con=pymysql.connect(host=host,user=user,passwd=psd,db=db,charset=c,port=port)
#数据库游标
cue=con.cursor()
print("mysql connect succes")#测试语句,这在程序执行时非常有效的理解程序是否执行到这一步
#sql="insert into gamerank (rank,g_name,g_type,g_status,g_hot) values(%s,%s,%s,%s,%s)" % (item['rank'],item['game'],item['type'],item['status'],item['hot'])
try:
cue.execute("insert into gamerank (rank,g_name,g_type,g_status,g_hot) values(%s,%s,%s,%s,%s)",[ item['rank'],item['game'],item['type'],item['status'],item['hot'] ])
print("insert success")#测试语句
except Exception as e:
print('Insert error:',e)
con.rollback()
else:
con.commit()
con.close()
return item

更多相关文章

  1. 直接的文件备份和用sqlserver的备份有什么区别
  2. 50分求关于执行SQL脚本文件的问题,在线等 解决了马上结贴。
  3. 字符集问题的初步探讨(五)----如何识别导出文件的字符集
  4. 求指导,PB12.0 如何用ini文件 连接sql 2005数据库
  5. PHP执行.SQL文件的实例代码分享
  6. SQL Server 2012失败:导入平面文件时,日期为yyyyy.m.dd格式
  7. [SQL Server] 数据库日志文件自动增长导致连接超时的分析
  8. 如何将MDB (Access)文件转换为MySQL(或纯SQL文件)?
  9. mysql 导出数据到txt文件

随机推荐

  1. Android下的任务和Activity栈
  2. android 判断当前application 是在前台还
  3. android > ListView -- SimpleAdapter
  4. Android Studio 3.0找不到Android Device
  5. android 5.1 usb调试默认关闭设置方法
  6. [zz] Android Service 示例
  7. Mainfest
  8. Android(安卓)分享功能的实现
  9. android 五种Log的意思
  10. Android电话拨号器