爬蟲-Scrapy(三) 翻頁的實現
阿新 • • 發佈:2020-12-27
1.翻頁的實現
上一篇實現了單頁的爬取,再加3行程式碼就可以實現翻頁了。
基本思路是查詢頁面中‘下一頁’按鈕對應的href地址,然後回撥parse方法實現迴圈,直至找不到'下一頁'的連結為止。
程式碼:
import scrapy import re from scpy1.items import Scpy1Item class Qiubai1Spider(scrapy.Spider): name = 'qiubai1' allowed_domains = ['qiushibaike.com'] start_urls = ['https://www.qiushibaike.com/text/'] domain_url = 'https://www.qiushibaike.com' def parse(self, response): #獲取笑話列表 joke_list = response.xpath("//div[contains(@class, 'article block')]") #解析笑話內容 for joke in joke_list: # 解析作者、內容 author = joke.xpath("./div/a[2]/h2/text()").extract_first() content= joke.xpath(".//div[@class='content']/span/text()").extract() # 封裝資料至item item = Scpy1Item() item['author'] = re.sub("[\n]", "", author) item['content'] = re.sub("[\n]", "", ','.join(content)) yield item ## 獲取下一頁url next_url = response.xpath("//span[@class='next']/../@href").extract_first() # 找到按鈕'下一頁'的href ## 如果下一頁url存在, 回撥parse方法處理 if next_url: yield scrapy.Request(self.domain_url + next_url, callback=self.parse)
2.匯出到檔案
執行成功後,會發現item資料量比較多了,這次不再print ,而是把資料匯出至csv檔案檢視。 用到的命令是:
Scrapy crawl qiubai1 -o qiubai1.csv
匯出的中文是亂碼,這個時候需要改下settings.py 檔案,設定下匯出編碼
# Feed export encoding FEED_EXPORT_ENCODING = 'gb18030'
網上可能有些寫utf-8的,不行的,我的都是自己測試過的。