枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述PyHacker编写指南打造URL批量采集器相关的知识,希望能为你提供帮助。
这节课是巡安似海PyHacker编写指南的《打造URL批量采集器》
喜欢用python写脚本的小伙伴可以跟着一起写一写呀。
编写环境:Python2.x
00x1:
需要用到的模块如下:
import requests
import re
本文将用re正则进行讲解,如果你用Xpath也可以
00x2:
首先我们要选取搜索引擎(其他搜索引擎原理相同)
以bing为例:Cn.bing.com
首先分析bing翻页机制:
https://cn.bing.com/search?q=内容& first=0 第一页
https://cn.bing.com/search?q=内容& first=10 第二页
https://cn.bing.com/search?q=内容& first=20 第三页
页数 = First*10
分析完毕,我们来请求看一下
def req():
url = https://cn.bing.com/search?q=小陈& first=0
headers = User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
req = requests.get(url,headers=headers)
html = req.content
print html
Ok,没毛病
00x3:
分析需要采集的url在哪个位置
文章图片
得出正则:(.*?)
正则表达式学习:(百度搜:python 正则表达式)
def reurl():
urlr = r< cite> (.*?)< /cite>
reurl = re.findall(urlr,html)
print reurl
文章图片
就在我请求第二页的时候发现了问题
文章图片
【PyHacker编写指南打造URL批量采集器】可以看到请求内容和第一页一样,有某种验证机制
一般情况下验证机制,表示特定参数
经过多次测试,发现缺少 Cookie: _EDGE_V=1;
文章图片
文章图片
请求正常,大致已经完成
接下来只需要给关键词和页数变量就ok了
?
00x4:
再搜索site:baidu.com 又出现了问题
文章图片
于是修改正则为:
target="_blank" href="https://www.songbingjia.com/android/(http.*?\\..*?\\..*?)" h="
文章图片
有很多我们不想要的结果,我们再来遍历下采集的urls
做一下处理
正则为:
(http[s]?://.*?)/
?代码为:
def url():
for url in urls:
urlr = r(http[s]?://.*?)/
url = re.findall(urlr,url)
print url
文章图片
print url 改为 print url[0] 再进行处理一下
可以看到下面还有重复的url,对url去重一下
def qc():#去重复
for url in url_ok:
if url in url_bing:
continue
url_bing.append(url)
文章图片
00x5:
接下来我们要让他自动保存到url_bing.txt
with open(url_bing.txt,a+)as f:
for url in url_bing:
print url
f.write(url+"\\n")
print "Save as url_bing.txt"
00x6:
完整代码:
#!/usr/bin/python
#-*- coding:utf-8 -*-
import requests
import re
urls = []
url_ok = []
url_bing=[]
def req(q,first):
global html
url = https://cn.bing.com/search?q=%s& first=%s%(q,first)
print url
headers =
Host:cn.bing.com,
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0,
Cookie: _EDGE_V=1;
req = requests.get(url,headers=headers)
html = req.content
def reurl():#正则匹配url
urlr = rtarget="_blank" href="https://www.songbingjia.com/android/(http.*?\\..*?\\..*?)" h="
reurl = re.findall(urlr,html)
for url in reurl:
if url not in urls:
urls.append(url)
def url():#url二次处理
for url in urls:
urlr = r(http[s]?://.*?)/
url = re.findall(urlr,url)
url_ok.append(url[0])
def qc():#去重复
for url in url_ok:
if url in url_bing:
continue
url_bing.append(url)
if __name__ == __main__:
q = raw_input(\\nkey:)
page = input(page:)
for first in range(0, page):
req(q, first * 10)
reurl()
url()
qc()
with open(url_bing.txt,a+)as f:
for url in url_bing:
print url
f.write(url+"\\n")
print "Save as url_bing.txt"
?
喜欢的朋友们点个赞叭~
文章图片
推荐阅读
- Linux中木马如何处理
- linux下搭建Ipsec+L2TP VPN服务(线上)
- OSPF多域配置
- 深度学习实战之手写签名识别(100%准确率语音播报)
- 5个实用的PDF自动化办公操作~1行Python代码搞定(解密加水印PPT/Word/TxT转PDF)
- OSPF多区域间配置
- java WebSocket 即时通讯服务端代码
- 《处理电脑故障必要技能——备份与恢复WiFi配置》
- 第一篇博文福利新人博主,快来get你的专属福利