(!!!————本篇博客以 ” 伯乐在线 “ 网站为例————!!!)
几个文件之间的联系
1. name.py(例如:a58tc.py) (以 58同城 为例)
(1)通过一系列的 xpath 匹配获取到要爬取的内容(字段)
(2)通过实例化items.py 中定义的类
item = TaobaoItem()
(3)把内容用字典的形式传给 items.py
item['name'] = name
item['title'] = title
item['price'] = price
yield item # 把数据传给 items.py
-------------------------------------------------------------------
2. items.py(定义 scrapy 内部数据的 模型 的文件)
class TongchengItem(scrapy.Item):
mingzi = scrapy.Field()
title = scrapy.Field()
nian = scrapy.Field()
def save(self):
sql = 'insert into tc_test(mingzi,title,nian,licheng,rongliang,moshi,price,img) values(%s,%s,%s,%s,%s,%s,%s,%s)'
data = (self['mingzi'],self['title'],self['nian'],self['licheng'],self['rongliang'],self['moshi'],self['price'],self['img'],)
return (sql,data) # 把值传给 pipelines.py
------------------------------------------------------------------
3. pipelines.py
# 当我们的items 被返回的时候, 会自动调用我们的pipline类中的process_item()需要加到setting里面:))
class Scrapy58LjwPipeline(object):
def process_item(self,item,spider):
(sql,data) = item.save() # 返回值给pipelines.py
mysql_58 = MysqlHelper() # 调用连接数据库类中的函数save()
mysql_58.execute_modify_sql(sql,data) # 把数据存到数据库
return item
-----------------------------------------------------------------
4. settings.py
ITEM_PIPELINES = {
'scrapy_ljw.pipelines.Scrapy58LjwPipeline': 300,
}
Scrapy的文件结构
1. items.py ———(是定义scrapy内部数据的文件 )
# (1) items.py 里的类都是继承 scrapy.item,如:
# (2) 这个类里边所有的属性都等于scrapy.Field()
class BoleItem(scrapy.Item):
title = scrapy.Field() # name 是属性
original_article = scrapy.Field() # original_article 是属性
translated_article = scrapy.Field()
content = scrapy.Field()
2. pipelines.py———( pipelines.py :当我们的items被返回的时候,会自动调用我们的pipelines类中process_item(),需要加到settings.py里面:)
ITEM_PIPELINES={
'today_scrapy.pipelines.StoreMysqlScrapyPipeline': 300,
}
3. settings.py
CONCURRENT_REQUESTS = 32 # 默认是16 类似于进程池开启了16个进程同时进行,提高效率
bole.py文件具体解释
- 一个url对应一个函数,这个函数用来解析url
yield scrapy.Request(href,callback=self.parse_detail)
// 是搜索 而 / 只是找div下紧跟的文本内容
<div>How old are you?
<span>怎么老是你?</span>
</div>
//text() 找到的是How old are you? 和 怎么老是你?
/text() 找到的是How old are you?
Scrapy 框架的优点
1. 最大的优点是:可以提高效率,不用自己写多进程和多线程
2. settings.py 文件里的 CONCURRENT_REQUESTS = 32 如果不打开,则默认是16个(意思是类似于开了16的进程的效果,但它用的不一定是进程和线程,只是起到了同样的提高效率的作用)