追蹤鏈接——爬取后續(xù)鏈接

讓我們討論一下市咆,你希望獲得整個網(wǎng)站的語錄而不是僅僅的爬取開始http://quotes.toscrape.com汉操,給的兩個網(wǎng)頁。

現(xiàn)在你理解了如何從網(wǎng)頁中提取數(shù)據(jù)蒙兰,讓我們了解如何從開始的鏈接來追蹤后續(xù)鏈接磷瘤。

首先是從網(wǎng)頁中提取我們想要追蹤的鏈接。檢查測試我們的網(wǎng)頁搜变,我們可以看到下一頁的鏈接采缚,以HTML標(biāo)記:

    <ul class = "pager">
        <li class = "next">
            <a href = "/page/2/">Next <span aria-hidden = "true">&rarr;</span></a>
        </li>
    </ul>

我們可以嘗試在shell中提取它:

    >>>response.css('li.next a').extract_first()
    '<a href = "/page/2/">Next <span aria-hidden = "true">→</span></a>'

我們提取了標(biāo)簽元素,但是我們想要其中屬性的href值挠他。為此扳抽,Scarpy提供CSS的擴展應(yīng)用讓我們提取屬性中的內(nèi)容,像這樣:

    >>>response.css('li.next a::attr(href)').extract_first()
    '/page/2/'

現(xiàn)在修改我們的爬蟲來遞歸下一頁的功能殖侵,從網(wǎng)頁中提取數(shù)據(jù):

    import scrapy


    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/page/1/',
        ]

        def parse(self, response):
            for quote in response.css('div.quote'):
                yield{
                    'text':quote.css('span.text::text').extract_first(),
                    'author':quote.css('span.text:text').extract_first(),
                    'tags':quote.css('div.tags a.tag::text').extract(),
                }
            next_page = response.css('li.next a::attr(href)').extract_first()
            if next_page is not None:
                next_page = response.urljoin(next_page)
                yield scrapy.Request(next_page, callback = self.parse)

現(xiàn)在提取數(shù)據(jù)后贸呢,parse()方法查找下一頁的鏈接,以urljoin()方法建立網(wǎng)站完整的URL拢军,向下一頁生成新請求楞陷,為下一頁的鏈接提取數(shù)據(jù)注冊它本身為返回函數(shù)同時保持爬取整個網(wǎng)站。

你看到的是Scrapy追蹤鏈接的機制:當(dāng)你在返回函數(shù)中生成請求茉唉,Scrapy將會安排請求被發(fā)送和注冊返回函數(shù)被執(zhí)行固蛾,直到請求結(jié)束。

使用這方法赌渣,你可以搭建復(fù)雜的爬蟲來追蹤你需要的深度魏铅,同時在你訪問的網(wǎng)頁中提取數(shù)據(jù)。

在我們的例子中坚芜,它創(chuàng)建了一個循環(huán)览芳,追蹤所有網(wǎng)頁的鏈接——讓我們來爬取具有標(biāo)記頁數(shù)的博客、論壇和其他網(wǎng)站鸿竖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沧竟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缚忧,更是在濱河造成了極大的恐慌悟泵,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闪水,死亡現(xiàn)場離奇詭異糕非,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門朽肥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禁筏,“玉大人,你說我怎么就攤上這事衡招±槲簦” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵始腾,是天一觀的道長州刽。 經(jīng)常有香客問我,道長浪箭,這世上最難降的妖魔是什么穗椅? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮山林,結(jié)果婚禮上房待,老公的妹妹穿的比我還像新娘邢羔。我一直安慰自己驼抹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布拜鹤。 她就那樣靜靜地躺著框冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敏簿。 梳的紋絲不亂的頭發(fā)上明也,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音惯裕,去河邊找鬼温数。 笑死,一個胖子當(dāng)著我的面吹牛蜻势,可吹牛的內(nèi)容都是我干的撑刺。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼握玛,長吁一口氣:“原來是場噩夢啊……” “哼够傍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挠铲,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冕屯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拂苹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體安聘,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浴韭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带迟。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖囱桨,靈堂內(nèi)的尸體忽然破棺而出仓犬,到底是詐尸還是另有隱情,我是刑警寧澤舍肠,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布搀继,位于F島的核電站,受9級特大地震影響翠语,放射性物質(zhì)發(fā)生泄漏叽躯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一肌括、第九天 我趴在偏房一處隱蔽的房頂上張望点骑。 院中可真熱鬧,春花似錦谍夭、人聲如沸黑滴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袁辈。三九已至,卻和暖如春珠漂,著一層夾襖步出監(jiān)牢的瞬間晚缩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工媳危, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荞彼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓待笑,卻偏偏與公主長得像鸣皂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子滋觉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

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