本文已参与「新人创作礼」活动,一起开启掘金创作之路。
今天找了个网站,说是靶场,让我们获取数字和,我觉得有点意思,所以写了个简单的算法匹配数字,网页主页如下:
右键检查,发现数据都在,起码没有加密什么的,然后打开控制台-网络-刷新,第一个就是主体,发现所有数据都在里面,所以找到对应的URL,准备写爬虫,但是返回来的数据竟然没有数字,我很纳闷,再仔细一看,嗷,原来是JavaScript脚本没有被网页执行,准备爬取js文件的,但是我一看,你这都摆在HTML上了,我还爬什么js文件啊,直接cirl+A,复制文本到TXT文档里,然后开始写算法,最后成功得出结果:341185
代码运行:
import sys
import time
import os
import json
import re # 正则表达式,进行文字匹配
def is_number(s):
try: # 如果能运行float(s)语句,返回True(字符串s是浮点数)
float(s)
return True
except ValueError: # ValueError为Python的一种标准异常,表示"传入无效的参数"
pass # 如果引发了ValueError这种异常,不做任何事情(pass:不做任何事情,一般用做占位语句)
try:
import unicodedata # 处理ASCii码的包
unicodedata.numeric(s) # 把一个表示数字的字符串转换为浮点数返回的函数
return True
except (TypeError, ValueError):
pass
return False
uus = ''
with open(r'C:\Users\ycl\PycharmProjects\untitled8\靶场测试.txt','r',encoding='utf-8') as f:
str = f.readlines()
jj = 0
print(type(str))
for i in str:
num = re.findall(' (.*?)\n', i)
if num is not None:
for ii in num:
if (is_number(ii)==True):
jj += float(ii)
print(jj)
# for i in str:
# uus += i
# uus.split('\n')
# print(uus)
#
# t = re.findall(r'<div class="col-md-1">(.*?)</div>', uus)
# print(t)
''' <div class="col-md-1">\n', ' 166\n'''
# response.encoding = 'utf-8'
# html = response.text
# # print(html)
# js = json.loads(html)
# print(js)
当我拿到结果,准备写答案时,网站显示不安全,不让我访问,无视风险继续访问, 得到:
我真的无语了.....
总结:
虽然靶场是坏的,但是也从其中学到了不少知识,遇见不能爬取的页面,如果有源码在,我们也可以复制到TXT中,之后的步骤就是response.text()一模一样了,还是re.findall()到所需要的信息,也可以复制到本地HTML中,然后抓取xpath,或者利用css选择器来获取信息