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
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值