内容简介: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 震撼来袭,超轻量级物联网虚拟机
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First Python
Paul Barry / O'Reilly Media / 2010-11-30 / USD 49.99
Are you keen to add Python to your programming skills? Learn quickly and have some fun at the same time with Head First Python. This book takes you beyond typical how-to manuals with engaging images, ......一起来看看 《Head First Python》 这本书的介绍吧!