内容简介:repo:如今,网上的爬虫教程可谓是泛滥成灾了,从urllib开始讲,最后才讲到requests和selenium这类高级库,实际上,根本就不必这么费心地去了解这么多无谓的东西的。只需记住爬虫总共就三大步骤:发起请求——解析数据——存储数据,这样就足以写出最基本的爬虫了。诸如像Scrapy这样的框架,可以说是集成了爬虫的一切,但是新人可能会用的不怎么顺手,看教程可能还会踩各种各样的坑,而且Scrapy本身体积也有点大。因此,本人决定亲手写一个轻量级的爬虫框架————仅支持Python3.6及以上版本。
repo: github.com/alphardex/p…
如今,网上的爬虫教程可谓是泛滥成灾了,从urllib开始讲,最后才讲到requests和selenium这类高级库,实际上,根本就不必这么费心地去了解这么多无谓的东西的。只需记住爬虫总共就三大步骤:发起请求——解析数据——存储数据,这样就足以写出最基本的爬虫了。诸如像Scrapy这样的框架,可以说是集成了爬虫的一切,但是新人可能会用的不怎么顺手,看教程可能还会踩各种各样的坑,而且Scrapy本身体积也有点大。因此,本人决定亲手写一个轻量级的爬虫框架———— looter ,里面集成了调试和爬虫模板这两个核心功能,利用looter,你就能迅速地写出一个高效的爬虫。另外,本项目的函数文档也相当完整,如果有不明白的地方可以自行阅读源码(一般都是按Ctrl+左键或者F12)。
安装
$ pip install looter 复制代码
仅支持 Python 3.6及以上版本。
快速开始
让我们先来撸一个非常简单的图片爬虫:首先,用 shell 获取网站
$ looter shell https://konachan.com/post 复制代码
然后用1行代码将图片的url提取出来
>>> imgs = tree.css('a.directlink::attr(href)').extract() 复制代码
或者用另一种方式提取
>>> imgs = links(res, pattern=r'.*/(jpeg|image)/.*') 复制代码
将url保存到本地
>>> Path('konachan.txt').write_text('\n'.join(imgs)) 复制代码
可以通过wget等下载 工具 将图片下载下来
$ wget -i konachan.txt 复制代码
如果想要看更多的爬虫例子, 猛戳这里
工作流
如果你想迅速撸出一个爬虫,那么你可以用looter提供的模板来自动生成一个
$ looter genspider <name> [--async] 复制代码
async是一个备用的选项,它使得生成的爬虫核心用asyncio而非线程池。
在生成的模板中,你可以自定义domain和tasklist这两个变量。
什么是tasklist?实际上它就是你想要抓取的页面的所有链接。
以konachan.com为例,你可以使用列表推导式来创建自己的tasklist:
domain = 'https://konachan.com' tasklist = [f'{domain}/post?page={i}' for i in range(1, 9777)] 复制代码
然后你就要定制你的crawl函数,这是爬虫的核心部分。
def crawl(url): tree = lt.fetch(url) items = tree.css('ul li') for item in items: data = {} # data[...] = item.css(...) pprint(data) 复制代码
在大多数情况下,你所要抓取的内容是一个列表(也就是HTML中的ul或ol标签),可以用css选择器将它们保存为items变量。
然后,你只需使用for循环来迭代它们,并抽取你想要的数据,将它们存储到dict中。
注意:目前looter使用了parsel来解析网页,和Scrapy的解析工具一样。如果想用以前的cssselect的话,把fetch的use_parsel设为False就可以了。
但是,在你写完这个爬虫之前,最好用looter提供的shell来调试一下你的css代码是否正确。(目前已集成 ptpython ,一个支持自动补全的REPL)
>>> items = tree.css('ul li') >>> item = items[0] >>> item.css(anything you want to crawl) # 注意代码的输出是否正确! 复制代码
调试完成后,你的爬虫自然也就完成了。怎么样,是不是很简单:)
函数
looter为用户提供了一些比较实用的函数。
view
在爬取页面前,你最好确认一下页面的渲染是否是你想要的
>>> view(url) 复制代码
links
获取网页的所有链接
>>> links(res) # 获取所有链接 >>> links(res, search='...') # 查找指定链接 >>> links(res, pattern=r'...') # 正则查找链接 复制代码
save_as_json
将所得结果保存为json文件,支持按键值排序(sort_by)和去重(no_duplicate)
>>> total = [...] >>> save_as_json(total, sort_by='key', no_duplicate=True) 复制代码
如果想保存为别的格式(csv、xls等),用pandas转化即可
>>> import pandas as pd >>> data = pd.read_json('xxx.json') >>> data.to_csv() 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 200 行代码实现超轻量级编译器
- 超轻量级 sql 模板插件 SqlTpl 正式发布第一版
- EVM 超轻量物联网虚拟机 1.0 正式版发布
- 超轻量级框架 Next 发布 3.0.0.0-DEBUG 版本
- Kuiper 0.2.0 正式发布:超轻量 IoT 边缘流处理
- EVM 0.9 震撼来袭,超轻量级物联网虚拟机
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The CS Detective: An Algorithmic Tale of Crime, Conspiracy, and
Jeremy Kubica / No Starch Press / 2016-8-15 / USD 13.74
Meet Frank Runtime. Disgraced ex-detective. Hard-boiled private eye. Search expert.When a robbery hits police headquarters, it's up to Frank Runtime and his extensive search skills to catch the culpri......一起来看看 《The CS Detective: An Algorithmic Tale of Crime, Conspiracy, and 》 这本书的介绍吧!