前面介绍了Scrapy如何实现一个最简单的爬虫,但是这个Demo里只是对一个页面进行了抓取。在实际应用中,爬虫一个重要功能是”发现新页面”,然后递归的让爬取操作进行下去。
发现新页面的方法很简单,我们首先定义一个爬虫的入口URL地址,比如《Scrapy入门教程》中的start_urls,爬虫首先将这个页面的内容抓取之后,解析其内容,将所有的链接地址提取出来。这个提取的过程是很简单的,通过一个html解析库,将这样的节点内容提取出来,href参数的值就是一个新页面的URL。获取这个URL值之后,将其加入到任务队列中,爬虫不断的从队列中取URL即可。这样,只需要为爬虫定义一个入口的URL,那么爬虫就能够自动的爬取到指定网站的绝大多数页面。
当然,在具体的实现中,我们还需要对提取的URL做进一步处理:
1. 判断URL指向网站的域名,如果指向的是外部网站,那么可以将其丢弃
2. URL去重,可以将所有爬取过的URL存入数据库中,然后查询新提取的URL在数据库中是否存在,如果存在的话,当然就无需再去爬取了。
下面介绍一下如何在Scrapy中完成上述这样的功能。
我们只需要改写spider的那个py文件即可,修改parse()方法代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from scrapy.selector import HtmlXPathSelector def parse(self, response): hxs = HtmlXPathSelector(response) items = [] newurls = hxs.select('//a/@href').extract() validurls = [] for url in newurls: #判断URL是否合法 if true: validurls.append(url) items.extend([self.make_requests_from_url(url).replace(callback=self.parse) for url in validurls]) sites = hxs.select('//ul/li') items = [] for site in sites: item = DmozItem() item['title'] = site.select('a/text()').extract() item['link'] = site.select('a/@href').extract() item['desc'] = site.select('text()').extract() items.append(item) return items |
相关推荐
Scapy中文使用文档.pdf
scapy2.1.0 python source
该工具基于Scapy,用于创建EDIG和修改网络数据包(IT和OT),如IP、UDP、TCP、HTTP、RIP、ICMP、Modubs、Profinet等。
scapy傻瓜安装包,把压缩包内所有exe安装好即可完成scapy安装
scapy for windows scapy for windows scapy for windows scapy for windows
Python3 scapy模块 scapy-python3-0.14.tar
python scapy包 函数速查手册,方便查看相关函数的帮助。
可以在Python2.7上安装scapy,亲测可用,利用scapy抓包,发包分析包,完美!!!
python使用scapy修改替换pcap的payload 例如替换http get请求的内容,替换tcp负载内容
udp协议扫描 发现原理 向目标主机发送一个,没有开放的端口发送数据,目标主机会返回一个ICMP 目标端口不可达的消息,通过该特征可以对主机...通过python发包神器scapy构造UDP数据包 端口一定要选择没有开放的,不然
包含scapy在windows下的所有安装包和安装说明 scapy是一个强大的交互式(interactive)的包操作程序,用python写的,有一个python的命令行解释器界面,可直接运行,当然也可以作为第三库。
scapy 手册
scapy documentation 清晰版pdf
python数据包分析库scapy
Scapy 中文文档
scapy 讲解手册,可以有效的整理知识点,完整的ppt文档,不需要在总结,美观有b格!
r2scapy - 一个用Scapy解码数据包的radare2插件
Python的Scapy库,老手都知道的,玩的时候悠着点,小心被警察叔叔请去喝茶(内附另外3种库+Python)
windows 安装scapy全部文件,exe安装不依赖编译环境, for python2.7;
Scapy是一个Python程序,使用户能够发送,嗅探和剖析并伪造网络数据包。此功能允许构建可以探测,扫描或攻击网络的工具。