还用什么scrapy!用这个框架快速轻量,原来爬虫这么简单

本文介绍了一个新的爬虫框架feapder,通过对比scrapy,展示了如何使用feapder快速开发爬虫。内容包括列表页和详情页的爬取,数据入库,以及如何处理动态渲染和反爬策略。feapder支持自动入库和分布式爬虫功能,适用于轻量级和大规模数据采集。
摘要由CSDN通过智能技术生成

之前,我们写爬虫,用得最多的框架莫过于scrapy啦,今天我们用最近新出的爬虫框架feapder来开发爬虫,看下是怎样的体验。

目标网站:aHR0cHM6Ly93d3cubGFnb3UuY29tLw==
需求:采集职位列表与职位详情,详情需每7天更新一次
为了演示,以下只搜索与爬虫相关的职位

1. 调研

1.1 列表页面

首先我们需要看下页面是否为动态渲染的,接口是否有反爬。

看是否为动态渲染的可以右键,显示网页源代码,然后搜索网页上的内容源码里是否存在,比如搜索列表的第一条知衣科技,匹配了0条,则初步判断是动态渲染的

或者可以用feapder命令,下载网页源码,查看。

打开后的页面为加载中

调用response.open()命令会在工作目录下生产一个temp.html文件,内容为当前请求返回的源码,我们点击查看,是一段js,有安全验证。因此可以推断出该网站有反爬,难度升级预警

feapder还支持使用curl命令请求,方式如下:

按F12,或者右键检查,打开调试窗口,刷新页面,点击当前页的请求,复制为curl,返回命令行窗口,输入 feapder shell --然后粘贴刚刚复制的内容

 


发现携带header,cookie也不行,可能是某些参数只能用一次吧。

调研结论:列表页有反爬,页面动态渲染

ps: 正常大神还会继续调研,列表接口是什么,如何破解反爬,但因为我是小白,就先不纠结了

1.2 详情页面

与列表页调研类似,结论是有反爬,但页面不是动态渲染的

2. 创建项目

打开命令行工具,输入:

> feapder create -p lagou-spider                                                                                   

lagou-spider 项目生成成功

生成项目如下:

我用的pycharm,先右键,将这个项目加入到工作区间。
(右键项目名,Mark Directory as -> Sources Root)

3. 写列表页爬虫

3.1 创建爬虫

> cd lagou-spider/spiders 
> feapder create -s list_spider 

ListSpider 生成成功

生成代码如下:

import feapder


class ListSpider(feapder.AirSpider):
    def start_requests(self):
        yield feapder.Request("https://www.baidu.com")

    def parse(self, request, response):
        print(response)


if __name__ == "__main__":
    ListSpider().start()

这是请求百度的例子,可直接运行

3.2 写爬虫

下发任务:

def start_requests(self):
    yield feapder.Request("https://www.lagou.com/jobs/list_%E7%88%AC%E8%99%AB?labelWords=&fromSearch=true&suginput=", render=True)

注意到,我们在请求里携带了render参数,表示是否用浏览器渲染,因为这个列表页是动态渲染的,又有反爬,我比较怂&#

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Gecco是什么 Gecco是一款用java语言开发的轻量化的易用的网络爬虫。Gecco整合了jsoup、httpclient、fastjson、spring、htmlunit、redission等优秀框架,让您只需要配置一些jquery风格的选择器就能很快的写出一个爬虫。Gecco框架有优秀的可扩展性,框架基于开闭原则进行设计,对修改关闭、对扩展开放。同时Gecco基于十分开放的MIT开源协议,无论你是使用者还是希望共同完善Gecco的开发者,欢迎pull request。如果你喜欢这款爬虫框架请star 或者 fork!参考手册架构图: 主要特征  简单易用,使用jquery风格的选择器抽取元素  支持页面中的异步ajax请求  支持页面中的javascript变量抽取  利用Redis实现分布式抓取,参考gecco-redis  支持结合Spring开发业务逻辑,参考gecco-spring  支持htmlunit扩展,参考gecco-htmlunit  支持插件扩展机制  支持下载时UserAgent随机选取  支持下载代理服务器随机选取 使用手册:http://www.geccocrawler.com/tag/sysc/快速入门:@Gecco(matchUrl="https://github.com/{user}/{project}", pipelines="consolePipeline") public class MyGithub implements HtmlBean {     private static final long serialVersionUID = -7127412585200687225L;     @RequestParameter("user")     private String user;     @RequestParameter("project")     private String project;     @Text     @HtmlField(cssPath=".repository-meta-content")     private String title;     @Text     @HtmlField(cssPath=".pagehead-actions li:nth-child(2) .social-count")     private int star;     @Text     @HtmlField(cssPath=".pagehead-actions li:nth-child(3) .social-count")     private int fork;     @Html     @HtmlField(cssPath=".entry-content")     private String readme;     public String getReadme() {         return readme;     }     public void setReadme(String readme) {         this.readme = readme;     }     public String getUser() {         return user;     }     public void setUser(String user) {         this.user = user;     }     public String getProject() {         return project;     }     public void setProject(String project) {         this.project = project;     }     public String getTitle() {         return title;     }     public void setTitle(String title) {         this.title = title;     }     public int getStar() {         return star;     }     public void setStar(int star) {         this.star = star;     }     public int getFork() {         return fork;     }     public void setFork(int fork) {         this.fork = fork;     }     public static void main(String[] args) {         GeccoEngine.create()         .classpath("com.geccocrawler.gecco.demo")         .start("https://github.com/xtuhcy/gecco")         .thread(1)         .interval(2000)         .loop(true)         .mobile(false)         .start();     } }demo地址:教您使用java爬虫gecco抓取JD全部商品信息(一)教您使用java爬虫gecco抓取JD全部商品信息(二)教您使用java爬虫gecco抓取JD全部商品信息(三)集成Htmlunit下载页面爬虫的监控一个完整的例子,分页处理,结合spring,mysql入库 标签:网络爬虫  开源爬虫
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值