Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)
1. 創建爬蟲項目 :?scrapy startporject tencent?
? ?然后進入到項目中:?cd tencent
? ?創建爬蟲:scrapy genspider tencent_spider tencent.com
2. 在開始寫代碼之前,有些知識要知道
? ?
? ?可以找到頁面上的下一頁的url地址,然后用解析函數去處理,解析函數可以是當前函數,類似于函數遞歸
? 通過在Request中指定callback參數來確定哪個解析函數來解析
??
3. 爬蟲的代碼 。 tencent_spider.py? ? ?爬取騰訊招聘的網站。
# -*- coding: utf-8 -*- import scrapyclass TencentSpiderSpider(scrapy.Spider):name = 'tencent_spider'allowed_domains = ['tencent.com']start_urls = ['https://hr.tencent.com/position.php']def parse(self, response):tr_list = response.xpath("//table[@class='tablelist']//tr")[1:-1]for tr in tr_list:item = {}item["position"] = tr.xpath("./td/a/text()").extract_first()item["category"] = tr.xpath(".//td[2]/text()").extract_first()item["date"] = tr.xpath(".//td[5]/text()").extract_first()yield item# 找到下一頁的url地址next_url = response.xpath("//a[@id='next']/@href").extract_first()if next_url != "javascript:;":next_url = "https://hr.tencent.com/"+next_urlyield scrapy.Request(next_url,# callback 指定傳入的url交給那個解析函數去處理callback=self.parse)? ?開啟pipeline :?
? ?在pipelines.py里面寫上打印,先不保存,看打印的結果? ?
class TencentPipeline(object):def process_item(self, item, spider):print(item)return item? 運行爬蟲框架:?scrapy crawl tencent_spider
? ?可以看到結果不斷打印出來:??
? ?
可以在pipelines進行相應的保存代碼的編寫
4.? calkback參數:當callback參數指定解析函數時,
? ? ??自已可以在爬蟲中定義解析函數
? ? ?meta: 兩個解析函數之間傳遞數據
? ? 例如:
def parse(self,response):"""其他的先省略,主要看下面的參數傳遞"""yield scrapy.Request(next_url,# callback 指定傳入的url交給那個解析函數去處理callback=self.parse,meta={"item": item})"""如果還有一解析函數,數據就通過meta傳遞過來"""def parese1(self,response):"""可以直接通過鍵取出里面的值"""response.meta["item"]? dont_filter: 在Scrapy中默認請求是會去重的,請求過的url不會再請求?
? ? ? ? ? ? ? ? ? ? ?想要不去重的話? ,就設置為True
? ? ? ? ? ? ? ? ? ? 如果請求的頁面上的數據會根據時間的變化會更新,這時候就要這個改變參數
總結
以上是生活随笔為你收集整理的Scrapy框架的学习(5.scarpy实现翻页爬虫,以及scrapy.Request的相关参数介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrapy框架的学习(4.scrapy
- 下一篇: Scrapy框架的学习(6.item介绍