之前,我们写爬虫,用得最多的框架莫过于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参数,表示是否用浏览器渲染,因为这个列表页是动态渲染的,又有反爬,我比较怂&