开编语:
就如CSDN其他的作者说的一样,GlidedSky网站主要是提供给python爬虫感兴趣的伙伴们一个交流练习的网站,希望有同样爱好的伙伴们,在尝试接触该网站前注意作者以下内容:
定位
镀金的天空是一个互联网技能认证网站,要保证用户解出一道题目就意味着拥有了解决类似问题相应的技能,所以会激励以下行为:
- 解决题目证明自己拥有题目所考核的相关技能。
- 协助他人学习掌握题目所考核的相关技能。
对应的,会惩罚以下行为:
- 不具备题目所考核的相关技能的情况下,包括但不限于抄袭答案,代码等形式通过题目。
- 协助他人在不具备题目所考核的技能的情况下,通过题目。
在题目的设置上,追求:
- 实用性,题目考察的技能有具体的使用场景。
- 体系性,一个领域会出一系列题目,保证该领域有全面的认识。
附上网页地址:http://www.glidedsky.com
网站分析
打开题目可知,作者实际上是把第一题的页数拆成了1000页,也就是把1000个url里面的数字都加起来
好了,接下来就开始找规律,以及是否有其他需要注意的点....
打开F12,开启开发者模式,选择“Network",勾上“Preserve log”(去掉重复内容),打开第一个试试
找到了一个url地址:“http://www.glidedsky.com/level/web/crawler-basic-2”,貌似找到了,点击下一页试试
发现有一个跟第一页相似的,然后可以尝试再点击第三页看看
对比两者的url,终于找到了规律
第一页:http://www.glidedsky.com/level/web/crawler-basic-2
第二页:http://www.glidedsky.com/level/web/crawler-basic-2?page=2
在第二页里,用指针试试看第一页的url
发现第一页的url地址是这样的:http://www.glidedsky.com/level/web/crawler-basic-2?page=1
好了,基本可以确认url的规律为:http://www.glidedsky.com/level/web/crawler-basic-2?page={u}
其中“u”指的是第几页
接下来,再找找每一页的文本位置,可以发现文本信息都在class="col-md-1"里面
既然能通关第一关,那么这些小细节就不再多说了
代码:
以下是我个人练习该网站的源代码:
面向对象版本:
import requests #导入请求模块
from lxml import etree #导入解析模块
class GS2:
def __init__(self):
self.first_url = "http://www.glidedsky.com/level/web/crawler-basic-2?page={}"
self.headers = {"User-Agent":"",
"cookie":""}
def url_list(self):
get_url_list = []
for i in range(1,1001):
get_url_list.append(self.first_url.format(i))
return get_url_list
def parse(self,url):
response = requests.get(url=url,headers=self.headers)
return response.text
def run(self):
#构造url列表
url_list = self.url_list()
#发送请求,获取响应
int_list = 0
for url in url_list:
page = self.parse(url)
tree = etree.HTML(page)
html = tree.xpath("//div[@class='col-md-1']/text()")
for item in html:
print(item)
int_list += int(item.strip())
return int_list
if __name__ == '__main__':
gs2 = GS2()
print(gs2.run())
python嘛,代码越短,越pythoner
以下是简化版:
# !/usr/bin/python3
# -*- coding:utf-8 -*-
# @author:inganxu
# @Date:2021年8月4日
import requests #导入请求模块
from lxml import etree #导入解析模块
headers = {
"User-Agent":"",
"cookie":""
} #输入你的headers表头和cookie
num = 0 #预设总数=0
for u in range(1, 1001): #for循环1000页
url = f'http://www.glidedsky.com/level/web/crawler-basic-2?page={u}' #生成url列表
response = requests.get(url=url,headers=headers) #发送请求,返回响应
tree = etree.HTML(response.text) #解析数据
html = tree.xpath("//div[@class='col-md-1']/text()") #取数
for i in html: #把每一页的数字都相加起来
num += int(i)
print(num)
总结:
代码逻辑其实就是把1000页url逐个发起请求获取响应并解析其数据;把解析到的数字都逐个相加起来
例如:
for循环到第1页
解析其数据
把第1页的数字都相加起来
for循环到第2页
解析其数据
把第2页的数字都相加起来
for循环到第3页
.....
以此类推
得到1000页数字相加的结果
好了,本篇文章就到这里,希望对你有帮助!!!!!
注意:抄袭答案只会给你短暂的虚荣感,能够自己动手通过考验才是本人和网址作者的本意!!!