工作果然都是用的scrapy进行采集数据……今天工作上学习了一下,下班回到家的记录。
先理解scrapy的概念流程(功能流程图自寻)。
Scrapy框架功能流程:
scrapy框架先是将spider里的目标网站信息入栈scheduler,然后对网站进行requests后,将response输入Downloader,Downloader将response返回到spider并按照spider对数据的要求清洗数据,转存到Item Pipeline后,进行后续对数据存储。
详细介绍:
通过指令:
scrapy genspider [spiderID] [spiderURL]
创建对应爬取网站的爬虫。
[spiderID].py
name是scrapy其他部分调用时用到的名字,allowed_domains是一个约束器,start_urls是一个用于采集开始的url集合,所有的网站数据都是始于这个url集。
parse函数,是用于写后续数据操作的。前面生成了response后,这里可以对response进行数据处理,也可以存储到items里。
items.py
用于命名存储的变量,格式如下:
name = scrapy.Field()
id = scrapy.Field()
pipelines.py
后续对数据库存储操作以及存储数据到文件都写在这里,以存储数据库为例。代码类似如下:
class WikispiderPipeline(object):
def __init__(self):
self.conn = pymysql.connect(host="localhost", user="testUser", passwd="test123", db="mysql", charset="utf8")
def process_item(self, item, spider):
self.conn.execute("")
self.conn.commit()
return item
定义一个initing函数,里面写py文件和数据库mysql的连接。
在process_item里写对数据库的详细操作,记得一定要写commit()不然无法运行上述操作。
2018-5-1 更新
运行部分忘记写了……
框架使用时,要使用命令运行,最合适的方法就是在pycharm里的terminal里,直接输入如下命令格式。
scrapy crawl spidername