14爬虫:scrapy实现翻页爬取
一、翻页爬取的基本逻辑
这种网页的表现为:“上一页 1,2,,4.......下一页,尾页”。
情况1:观察页面源代码,发现url直接在源代码中体现,对应的解决方案是:(1)访问第一页,(2)提取下一页url,()提取下一页url,一直重复该流程到最后一页。
情况2:观察页面源代码,发现url不能在源代码中体现,对应的解决方案是:直接观察页面总数,观察每一页url的变化规律,通过程序模拟出每一页的url。
例如点击加载更多,或者鼠标向下滑动才能加载更多信息的分页逻辑属于不正常的分页。
情况1:加载更多,点击之后才可以加载下一页的内容。对应的解决方案是:通过抓包到url的变化规律,变化规律可能在每一页对应的url上体现,也可能在参数上体现。
情况2:滚动刷新,这种情况的解决方案也是抓包,规律。有一种特殊的情况,在前一页的请求结果中存在一个参数供下一页使用,这种情况多发生在微博中。
二、scrapy抓取17K相关书籍名称
先说明一下,17K网站现在加入了debug模式,导致翻页失败。
怎么解决debug模式还需要后续继续学习。但是我们可以深度理解一下在scrapy中翻页的思想。
具体的思路如下:
第一页网页源代码 | |
第二页网页源代码 | |
第三页网页源代码 | |
第4页网页源代码 |
通过对网页源代码的分析,我们在某一页上可以得到相近几页的url。比如说:
第一页网页源代码——》【2,,4,5,2】页的url地址;
第二页网页源代码——》【,4,5,6,】页的url地址;
第三页网页源代码——》【2,1,2,4,5,6,7,4】页的url地址;
以此类推我们能够得到所有页面的url地址。
这里就会存在一个问题,解析第n页的网页源代码,与第n-1页、第n+1页得到的url地址重复。会不会造成重复url的爬取。
对该问题我们首先给出答案,不会造成重复爬取的。大家还记得scrapy中有一个调度器schedule模块,在schedule中存在一个过滤器,过滤器会剔除已经爬取过的url,这也是scrapy框架的强大之处。
整个程序的工作流程如下图所示:
下面我们就给出上述翻页思想的代码实现,具体如下:
import scrapy
from novelSpider.items import ovelspiderItem
'''
settings.py中进行的设置
USER_AGET = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/57.6 (KHTML, like Gecko) Chrome/11.0.0.0 Safari/57.6"
ROBOTSTXT_OBEY = False
LOG_LEVEL = "WARIG"
DOWLOAD_DELAY =
ITEM_PIPELIES = {
"novelSpider.": 00,
}
'''
class ovelnameSpider(scrapy.Spider):
name = "novelame"
allowed_domains = ["17k"]
start_urls = ["https://www.17k/all"] # 修改起始url为我们需要的地址
def parse(self, respe, **kwargs):
#
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 14 条评论) |
本站网友 鸡血藤功效 | 23分钟前 发表 |
这种情况的解决方案也是抓包 | |
本站网友 西部国际博览会 | 9分钟前 发表 |
滚动刷新 | |
本站网友 海口市租房网 | 25分钟前 发表 |
滚动刷新 | |
本站网友 温州动车赔偿 | 28分钟前 发表 |
】页的url地址; 第三页网页源代码——》【2 | |
本站网友 福田汽车站官网 | 15分钟前 发表 |
这种情况的解决方案也是抓包 | |
本站网友 opportunities | 9分钟前 发表 |
解析第n页的网页源代码 | |
本站网友 曲库 | 6分钟前 发表 |
第n+1页得到的url地址重复 | |
本站网友 十二经络 | 15分钟前 发表 |
4 | |
本站网友 陈晓峰 | 27分钟前 发表 |
对应的解决方案是:通过抓包到url的变化规律 | |
本站网友 珍香胶囊 | 29分钟前 发表 |
对该问题我们首先给出答案 | |
本站网友 全球华人富豪榜 | 30分钟前 发表 |
不会造成重复爬取的 | |
本站网友 味精发明 | 0秒前 发表 |
一 | |
本站网友 潍坊落户 | 7分钟前 发表 |
} ''' class ovelnameSpider(scrapy.Spider) |