1. 程式人生 > >Scrapy框架爬蟲小說網工作流程

Scrapy框架爬蟲小說網工作流程

1.需求工具 pycharm 小說網的域名 (www.qisuu.com) 第一步—–建立檔案

建立成功後顯示如圖:

這裡寫圖片描述

第二步——將建立在桌面上的scrapy檔案用pycharm開啟: 這是建立成功後在pycharm中的顯示 這裡寫圖片描述

pycharm左下角開啟 Terminal 這裡寫圖片描述

開啟後如圖 我第一次鍵入了一條命令 提示爬蟲名字不能和專案名稱一樣,更改後再執行..成功建立爬蟲檔案 booksspider 建立爬蟲檔案命令: scrapy+ genspider+ 蜘蛛名稱 +網站域名 這裡寫圖片描述

建立成功後,出現爬蟲檔案: 這裡寫圖片描述

接下來,就可以在爬蟲檔案中寫爬蟲程式碼了

第三步——–編寫爬蟲程式碼 1.紅框框起來的頭部 有一個是自帶的,我提前 引用了幾個 接下來我需要用到的 功能模組在這裡就不再詳細解釋模組功能,下文用到後再解釋. 2.橢圓裡面的內容 填寫你爬取開始的頁面URL,這裡是自動生成的,一般是不正確的,需要自己開啟要爬取的初始頁,將URL複製到這裡. 這裡寫圖片描述

3.程式碼思路 1)請求導航條上的每個按鈕對應的頁面 2)分別解析每個頁面的電子書列表(主要獲得電子書的詳情url) 3)請求詳情url,解析電子書的詳細資訊(書名,封面,評分,大小…下載地址) 4)根據下載地址下載電子書到本地

獲取導航欄文字及連結

def parse(self, response):
    a_list = response.xpath("//div[@class='nav']/a[@target='_blank']")
    for a in a_list:
        # 分類名稱
        category_name = a.xpath("text()").extract_first("")
        # 拼接完整的分類url
        category_url = urlparse.urljoin(response.url, a.xpath("@href").extract_first(""))
        # 將分類地址轉發給downloader下載並將結果傳給parse_books_list
        # meta:專門用來傳遞引數,型別是字典
        yield scrapy.Request(
            url=category_url,
            callback=self.parse_books_list,
            meta={"category_name": category_name, }
        )

獲取每本書連結

def parse_books_list(self, response): href_list = response.xpath(“//div[@class=’listBox’]/ul/li/a/@href”).extract() for href in href_list: list_href = urlparse.urljoin(response.url, href) yield scrapy.Request( url=list_href, callback=self.parse_books_detail, meta=response.meta, # meta={“category_name”: response.meta[‘category_name’],} ) all_pages = response.xpath(“//select[@name=’select’]/option/@value”).extract() for page in all_pages: detail_url = urlparse.urljoin(response.url, page) yield scrapy.Request( url=detail_url, callback=self.parse_books_list, meta=response.meta ) 進入書本詳細頁 獲取書本詳細資訊及 下載連結 封面連結

def parse_books_detail(self, response): info_div = response.xpath(“//div[@class=’detail_right’]”) title = info_div.xpath(“h1/text()”).extract_first(“”) li_list = info_div.xpath(“ul/li”) size = li_list[2].xpath(“text()”).extract_first(“”) size = size.replace(u”檔案大小:”, “”).strip() date_time = li_list[4].xpath(“text()”).extract_first(“”) date_time = date_time.replace(u”釋出日期:”, “”).strip() user = li_list[6].xpath(“a/text()”).extract_first(“”) download_times = li_list[1].xpath(“text()”).extract_first(“”) download_times = download_times.replace(u”下載次數:”, “”).strip() book_degree = li_list[7].xpath(“em/@class”).extract_first(“”) book_degree = book_degree.replace(“lstar”, “”).strip() download_url = response.xpath(“//a[@class=’downButton’]/@href”)[1].extract() img_url = response.xpath(“//div[@class=’detail_pic’]/img/@src”).extract_first(“”) img_url = urlparse.urljoin(response.url, img_url) category_name = response.meta[‘category_name’] print title, user, date_time, category_name

    item = BooksItem()
    item['title'] = title
    item['size'] = size
    item['date_time'] = date_time
    item['user'] = user
    item['download_times'] = download_times
    item['book_degree'] = book_degree
    # 小說要以GBK格式進行儲存
    ########################
    item['download_url'] = [u"%s" % download_url]
    item['img_url'] = [img_url]
    ########################注意以列表方式儲存
    item['category_name'] = category_name
    yield item

第四步——設定item /與儲存有關 將需要儲存的資訊寫入,如圖所示: 這裡寫圖片描述

第五步——配置settings /與下載有關 開啟settings,找到紅方框中程式碼,原本是被註釋掉的,將 ITEM_PIPELINES{} 解註釋.原本就有的內容註釋掉,另外新增兩條與下載圖片與文字的程式碼. 最後,在ITEM_PIPELINES{}下面鍵入四行程式碼,分別為圖片和文字的下載連結與儲存路徑 這裡寫圖片描述

第六步——在Terminal中輸入執行命令 scrapy+crawl+爬蟲名稱 這裡寫圖片描述

執行後就會出現這個啦,圖片和文字全部存入這兩個資料夾中 這裡寫圖片描述