Scrapy中的翻頁

通過scrapy實現翻頁功能,爬取小說網站信息

測試網站:全書網。
根據scrapy這個框架的運行特點,翻頁必須和處理數據分開,不然無法執行。
一開始嘗試只用一個prase函數,直接按照以往的循環思想處理,失敗了,這個也希望其他學友注意這個問題,一定要分開。也就是翻頁功能是一個函數,處理是一個函數,放到兩個函數中去。

先在items文件裏面填寫如下字段,注意,在爬蟲文件裏面處理字段的時候,字段名可不能打錯了。

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class TencentItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link_url = scrapy.Field()
    author_name = scrapy.Field()

接下來就是爬取。

注意,response裏面的url不能直接被使用,所以,如果想要實現翻頁功能,必須手動把基本url拼接出來。但前提是,start_url 必須是能夠訪問的,不能出現404的情況。start_url相當於一個敲門磚。

# -*- coding: utf-8 -*-
import scrapy
from ..items import TencentItem

class TencentSpiderSpider(scrapy.Spider):
    name = 'tencent_spider'
    # allowed_domains = ['ddd']
    start_urls = ['http://www.quanshuwang.com/list/2_1.html']# 這個url必須是能訪問的。

    def parse(self, response):
        base_url='/'.join(response.url.split('/')[:4])+'/'# 拼接路徑。
        for i in range(1,11):
            url = base_url+'2_%d.html'%i
            yield scrapy.Request(url,callback=self.parse_url)# 交給子函數進行下一步處理。

    def parse_url(self, response):
        '''

        :param response:
        :return:
        '''
        title_list = response.xpath("//section[@class='section board-list board-list-collapse']/ul/li/span/a[1]/@title").extract()
        link_url = response.xpath("//section[@class='section board-list board-list-collapse']/ul/li/span/a[3]/@href").extract()
        author_name = response.xpath("//section[@class='section board-list board-list-collapse']/ul/li/span/a[2]/text()").extract()
        # print(title_list, link_url, author_name)
        for title_list,link_url,author_name in zip(title_list,link_url,author_name):


            items = TencentItem()
            items['title']=title_list
            items['link_url']=link_url
            items['author_name']=author_name
            yield items
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章