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+爬蟲名稱 這裡寫圖片描述
執行後就會出現這個啦,圖片和文字全部存入這兩個資料夾中 這裡寫圖片描述