Scrapy實戰(zhàn)篇(一)之爬取鏈家網(wǎng)成交房源數(shù)據(jù)(下)

在上一小節(jié)中,我們已經(jīng)提取到了房源的具體信息,這一節(jié)中邻寿,我們主要是對提取到的數(shù)據(jù)進行后續(xù)的處理蝎土,以及進行相關的設置。

數(shù)據(jù)處理

我們這里以把數(shù)據(jù)存儲到mongo數(shù)據(jù)庫為例绣否。
編寫pipelines.py文件

import pymongo


class MongoPipeline(object):

    collection = 'lianjia_house'  #數(shù)據(jù)庫collection名稱

    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    @classmethod
    def from_crawler(cls,crawler):
        return cls(
            mongo_uri = crawler.settings.get('MONGO_URI'),
            mongo_db = crawler.settings.get('MONGO_DB')
        )
    def open_spider(self,spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    def close(self, spider):
        self.client.close()

    def process_item(self, item, spider):
        table = self.db[self.collection]
        data = dict(item)
        table.insert_one(data)
        return item

非常簡單的幾步誊涯,就實現(xiàn)了將數(shù)據(jù)保存到mongo數(shù)據(jù)庫中,所以說mongo數(shù)據(jù)庫還是非常好用的蒜撮。
由于之前的學習篇中已經(jīng)學習過數(shù)據(jù)的存儲相關的內(nèi)容暴构,在這里就不多贅述。

設置隨機User-Agent

這個內(nèi)容在之前的學習篇中也已經(jīng)學習過了段磨,這里就直接拿過來用取逾。
編寫middlewares.py文件。

import scrapy
import random
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware


class MyUserAgentMiddleware(UserAgentMiddleware):

    def __init__(self, agents):
        self.agents = agents

    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            agents=crawler.settings.get('USER_AGENTS')
        )

    def process_request(self, request, spider):
        agent = random.choice(self.agents)
        request.headers['User-Agent'] = agent

設置(settings)

最后一步就是在settings.py文件中苹支,進行我們的設置和應用我們的相關的組件砾隅。
內(nèi)容如下:

BOT_NAME = 'lianjia'

SPIDER_MODULES = ['lianjia.spiders']
NEWSPIDER_MODULE = 'lianjia.spiders'

ROBOTSTXT_OBEY = False

USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
    "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
    "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
    ]

MONGO_URI = 'mongodb://localhost:27017'
MONGO_DB = "lianjia"

DOWNLOAD_DELAY = 2

DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
    'Connection':'keep-alive'
}

DOWNLOADER_MIDDLEWARES = {
    'lianjia.middlewares.MyUserAgentMiddleware': 400,
}

ITEM_PIPELINES = {
   'lianjia.pipelines.MongoPipeline': 300,
}

總結

由于我們爬取得數(shù)據(jù)量比較大,請求比較多沐序,如果你直接運行的話琉用,肯定是很快就會被封掉的,你可以選擇設置ip代理策幼,具體的設置方法你可以參照scrapy學習篇里面的設置ip代理邑时,這里就不多演示,當然了特姐,如果你想看一下效果的話晶丘,你可以選擇只爬取某一個區(qū)的數(shù)據(jù),比如鼓樓區(qū)唐含。其效果如下面所示浅浮。



另外,你可以在你的項目根目錄下創(chuàng)建一個run.py文件捷枯,里面添加如下的內(nèi)容:

from scrapy import cmdline
cmdline.execute("scrapy crawl lianjia".split())

其中滚秩,lianjia是你spider里面定義的名字,這樣淮捆,你只需要使用python run.py就可以運行這個項目了郁油。

這里提醒一下,如果你不是著急獲取這個數(shù)據(jù)的話攀痊,可以將設置里面的下載延遲設置的稍微大一些桐腌,一方面防止我們爬蟲被辦,另一方面以減輕對方服務器的壓力苟径。

github地址: https://github.com/cnkai/lianjia.git

聲明:本文僅供學習交流之用案站。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棘街,隨后出現(xiàn)的幾起案子蟆盐,更是在濱河造成了極大的恐慌承边,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舱禽,死亡現(xiàn)場離奇詭異炒刁,居然都是意外死亡恩沽,警方通過查閱死者的電腦和手機誊稚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罗心,“玉大人里伯,你說我怎么就攤上這事〔趁疲” “怎么了疾瓮?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長飒箭。 經(jīng)常有香客問我狼电,道長,這世上最難降的妖魔是什么弦蹂? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任肩碟,我火速辦了婚禮,結果婚禮上凸椿,老公的妹妹穿的比我還像新娘削祈。我一直安慰自己,他們只是感情好脑漫,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布髓抑。 她就那樣靜靜地躺著,像睡著了一般优幸。 火紅的嫁衣襯著肌膚如雪吨拍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天网杆,我揣著相機與錄音羹饰,去河邊找鬼。 笑死跛璧,一個胖子當著我的面吹牛严里,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播追城,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼刹碾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了座柱?” 一聲冷哼從身側響起迷帜,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤物舒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后戏锹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冠胯,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年锦针,在試婚紗的時候發(fā)現(xiàn)自己被綠了荠察。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡奈搜,死狀恐怖悉盆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情馋吗,我是刑警寧澤焕盟,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站宏粤,受9級特大地震影響脚翘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绍哎,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一来农、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛇摸,春花似錦备图、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饿肺,卻和暖如春蒋困,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敬辣。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工雪标, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人溉跃。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓村刨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撰茎。 傳聞我的和親對象是個殘疾皇子嵌牺,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容