PythonChallenge过关日记三、四
三
如题所示,需要找出两边各有三个大写字母的小写字母,即xXXXxXXXx中间的x
很显然,字符串在页面信息里面,就用requests.get来获取页面信息,并用findall来摘取所需要的范围。
再用一次findall找出符合标准的小写字母就可以了
得出答案linkedlist,替换之即可
故新网址为www.pythonchallenge.com/pc/def/linkedlist.html
打开后却发现网页提示你将html换成php,所以真·新网址为www.pythonchallenge.com/pc/def/linkedlist.php
from requests import get
from re import findall
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"}
content = get("http://www.pythonchallenge.com/pc/def/equality.html",headers=headers).content
source = findall(r"<!--([\d\D]*)-->", content.decode())
source = source[0].split('\n')
# print(len(source[3]))#1252-1 80
result = []
for i in range(len(source)):
word = findall("[a-z]+[A-Z][A-Z][A-Z]([a-z])[A-Z][A-Z][A-Z][a-z]+",source[i])
if word :
result.append(word)
print(result)
四
打开网页后是一张图片,可以点击,点击后进入另一个网站,会提示nothing的值,我们只需要将nothing=后面的数字改为已给的值即可。
事实上,这种事永远不可能这么简单,根据原网页的源代码中的注释来看,要替换很多次,所以我们可以用urllib、requests等库来实现自动访问并更换网址
值得注意的是,期间有需要人工计算的步骤,不过只有一次而已,在程序中更换nothing初值即可
最后我们得到的网址即http://www.pythonchallenge.com/pc/def/peak.html
import requests
import re
import time
url1 = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
url2 = "25357"
while True:
try:
content = requests.get(url1+url2).content.decode()
nothing = re.findall("nothing\D*([\d]*)",content)
url2 = nothing[0]
print(url2)
time.sleep(1.5)
except :
print(url1+url2)
break