(!!!————本篇博客以 ” 伯樂在線 “ 網站爲例————!!!)
幾個文件之間的聯繫
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的進程的效果,但它用的不一定是進程和線程,只是起到了同樣的提高效率的作用)