Python爬蟲學習18-通過CrawlSpider爬取數(shù)據(jù)

爬取一般網(wǎng)站常用的spider。其定義了一些規(guī)則(rule)來提供跟進link的方便的機制。 也許該spider并不是完全適合您的特定網(wǎng)站或項目,但其對很多情況都使用。 因此您可以以其為起點,根據(jù)需求修改部分方法。當然您也可以實現(xiàn)自己的spider。
除了從Spider繼承過來的(您必須提供的)屬性外,其提供了一個新的屬性:rules

一個包含一個(或多個) [Rule]對象的集合(list)。 每個 [Rule]對爬取網(wǎng)站的動作定義了特定表現(xiàn)。 Rule對象在下邊會介紹。 如果多個rule匹配了相同的鏈接,則根據(jù)他們在本屬性中被定義的順序,第一個會被使用。

該spider也提供了一個可復寫(overrideable)的方法:parse_start_url(*response*)
當start_url的請求返回時,該方法被調(diào)用。 該方法分析最初的返回值并必須返回一個 [Item]對象或者 一個 [Request]對象或者 一個可迭代的包含二者對象。
建立爬蟲的方法為:

scrapy genspider -t crawl lagou www.lagou.com

在生成的頁面中

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.loader import ItemLoader
from items import LagouJobItem, LagouJobItemLoader
from utils.common import get_md5
import datetime

class LagouSpider(CrawlSpider):
    name = 'lagou'
    allowed_domains = ['www.lagou.com']
    start_urls = ['https://www.lagou.com/']

    rules = (
        # 提取匹配 'category.php' (但不匹配 'subsection.php') 的鏈接并跟進鏈接(沒有callback意味著follow默認為True)
        Rule(LinkExtractor(allow=('www.lagou.com/zhaopin/Java/',), )),

        # 提取匹配 'item.php' 的鏈接并使用spider的parse_item方法進行分析
        Rule(LinkExtractor(allow=('www.lagou.com/jobs/',)), callback='parse_job'),
    )

    def parse_job(self, response):
        item_loader = LagouJobItemLoader(item=LagouJobItem(), response=response)
        item_loader.add_css("title", ".job-name span::text")
        item_loader.add_value("url", response.url)
        item_loader.add_value("url_object_id", get_md5(response.url))
        item_loader.add_xpath("job_city", "http://*[@class='job_request']/p/span[2]/text()")
        item_loader.add_xpath("work_years", "http://*[@class='job_request']/p/span[3]/text()")
        item_loader.add_xpath("degree_need", "http://*[@class='job_request']/p/span[4]/text()")
        item_loader.add_xpath("job_type", "http://*[@class='job_request']/p/span[5]/text()")
        item_loader.add_css("salary", ".job_request .salary::text")
        item_loader.add_css("publish_time", ".publish_time::text")
        item_loader.add_css("job_advantage", ".job-advantage p::text")
        item_loader.add_css("job_desc", ".job_bt div")
        item_loader.add_css("job_addr", ".work_addr")
        item_loader.add_css("tags", ".position-label .labels::text")

        item_loader.add_css("company_url", "#job_company dt a::attr(href)")
        item_loader.add_css("company_name", "#job_company dt a div h2::text")
        item_loader.add_value("crawl_time", datetime.datetime.now())

        job_item = item_loader.load_item()

        yield job_item
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評論 19 139
  • scrapy學習筆記(有示例版) 我的博客 scrapy學習筆記1.使用scrapy1.1創(chuàng)建工程1.2創(chuàng)建爬蟲模...
    陳思煜閱讀 13,126評論 4 46
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,361評論 25 708
  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,554評論 6 13
  • 在那個小小的角落里,安安靜靜地躺著那樣一個廟宇。院子不大,四方四正,有些年頭了。 那里曾經(jīng)是一個...
    潘多拉簡書閱讀 288評論 0 3

友情鏈接更多精彩內(nèi)容