今天给大家讲的是利用Python打造一个URL采集器

说到URL采集器,我们肯定需要接口吧!

本次教程用到的接口是baidu的搜索引擎

首先,我们正常搜索并分析数据包来分析看看如何实现url的批量采集

孤独常伴

https://www.baidu.com/s?wd=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&rsv_spt=1&rsv_iqid=0x909bae9d000558da&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=5&rsv_sug1=5&rsv_sug7=101

这是第一页URL

可以看到,这是我们正常搜索请求的数据,下面我们来看看浏览第二页时数据的变化

这是第二页:https://www.baidu.com/s?wd=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&pn=10&oq=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=f4d120df0004fbc5&rsv_t=58d4dJrKEr6OtcUqaWsEXrVTz4DrdC1h3TXUv8pXik4wI2jRTqqECQFfGy%2Bj7HaaNOIK

我们可以肯定这两个URL几乎一样,只有一处不同:第二个中多&pn=

既然这样,我们继续看看第三页的url吧!

这是第三页的URL:https://www.baidu.com/s?wd=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&pn=20&oq=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=84e712330005edb2&rsv_t=9ec7c30XeKr0RLwvtjmcIG9sKEmYmOBeduE%2FF%2BcUUIr0otPtnqJpegYm1f%2FKIGw6VtWc

对比第二页和第三页可以发现:这里面&pn=的值发送了变化,继续浏览下一页看看

第四页URL:https://www.baidu.com/s?wd=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&pn=30&oq=%E5%AD%A4%E7%8B%AC%E5%B8%B8%E4%BC%B4&tn=baiduhome_pg&ie=utf-8&usm=1&rsv_idx=2&rsv_pq=e6e60742000489f4&rsv_t=2f337Wjsc9UtMnLtXWHLNtXtePy2sdMkvNtCp5AXT92qtwg2dlB3Nt6FyFRLv621wLIY

对比第二、三、四页的URL我们可以发现,发生变化的是&pn=,而且每次递增10,所以我们可以确定这应该就是页码的关键值

,既然控制的页码的我们已经确定了,下一步就是控制关键字了,那么我们搜索的关键字放在哪的呢?

我们搜索其他试试看url的变化

当我搜索安全文库时,URL变成了:https://www.baidu.com/s?wd=%E5%AE%89%E5%85%A8%E6%96%87%E5%BA%93&rsv_spt=1&rsv_iqid=0xe628b5aa000303d4&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&oq=msf%25E7%25A4%25BE%25E5%258C%25BA&rsv_t=b783rAIUp7edP%2F8JKuhWC%2FQCKm5NmTSu4361srR5lNCxstWzmrAkBrtQrypNJA204pk5&inputT=1955&rsv_pq=8cc8877d00049d17&rsv_sug3=19&rsv_sug1=10&rsv_sug7=100&bs=msf%E7%A4%BE%E5%8C%BA

和刚刚我们搜索孤独常伴那个url相比较我们可以发现不同点在于?wd=其后的值

由此我们就可以确定这个参数用于控制我们搜索的关键字,既然整个思路已经明确,

那么我们开始写脚本吧!

首先涉及web方面,我们肯定需要Requests模块,其次等会我们还需要取出我们指定的内容,所以我们还需要re模块.

简单的框架就好了

下一步就是把这些URL取出

利用Python打造一个URL采集器

我们通过查看源代码观察这些url都有什么特点,通过观察,我们发现,这些url都有一个特点,如下图所示

 

利用Python打造一个URL采集器利用Python打造一个URL采集器

他们都存在这个标签中

既然这样,我们就需要用正则表达式匹配即可

我的正则表达式是这样的:

<div\sclass=\”f13\”><a\starget=\”_blank\”\shref=\”(.*?)\”\s+class=\”c-showurl\”

这就是整个脚本的流程思路了

实现批量的话我们只需要加上循环语句即可.

下面来看看我的Python代码吧!

import requests
import threading
import re
sc="https://www.baidu.com/s?wd="
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}
print("=========================")
print("孤独常伴    www.0xss.cn")        
print("=========================")
i=input("请输入查询的关键字:")
e=input("请输入结束页码:")
k=int(e)
ks=0
def cj():
	for ks in range(k):
		m=str(ks*10)
		urls=sc+i+"&pn="+m
		r=requests.get(urls,headers=headers)
		x=re.findall("<div\sclass=\"f13\"><a\starget=\"_blank\"\shref=\"(.*?)\"\s+class=\"c-showurl\"",r.text)
		for list in x:
			try:
				ti=requests.get(url=list,headers=headers,timeout=20)
				if ti.status_code==200:
					til=ti.url
					print(til)
			except:
				pass
t=threading.Thread(target=cj)
t.start()

这里我默认从0开始的,感兴趣的朋友可以自行Copy脚本进行修改,我们还可以将一些EXP镶嵌进来实现批量刷洞!

好了,暂时就BB到这!希望各位网络朋友关注一下本站,本站假期期间会更新大量原创技术文章(博主学生党,只有假期有空,haha!).