python-spider 第10题
copy 网页的代码做主要是想分析 beforesend 这个请求到底做了什么 最后找了一圈也没有发现的有啥 再翻了下js基础 发现是我想多了
这个函数什么东西都没有干
最后把请求头替换掉成功过关 具体检测的应该是请求头中的某一个 ,想要知道具体检测的是什么就把每一个请求头打上备注 看下少了哪个请求头访问会失败就完事了~
这个贴一个正则替换headers 跟一个爬虫老师学来的。
(.*): (.*) 替换成 "$1":"$2",
最后贴上代码
import json
from typing import Dict, List
import browsercookie
import requests
from requests.cookies import RequestsCookieJar
## init for classes
session = requests.session()
chrome_cookie = browsercookie.chrome()
s = []
url = "http://www.python-spider.com/api/challenge10"
# url = 'http://127.0.0.1:5000/data'
def get_cookie_from_chrome(domain: str) -> List[Dict]:
"""
:param domain: the cookies your want to get from.
:return: a dict the contains cookies from the domain.
"""
l = []
for i in chrome_cookie:
if domain in i.domain:
l.append({'name': i.name, "value": i.value})
return l
def set_cookie(domain):
"""
:param domain: the domain going to set
:return: the instance of RequestsCookieJar contain the cookies of the domain you set
"""
cookie_jar = RequestsCookieJar()
cookies_list = get_cookie_from_chrome(domain=domain)
for cookie in cookies_list:
cookie_jar.set(cookie['name'], cookie['value'], domain=domain)
return cookie_jar
if __name__ == '__main__':
header = {
"Connection": "keep-alive",
"Content-Length": "6",
"Accept": "application/json, text/javascript, */*; q=0.01",
"Dnt": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "http://www.python-spider.com/api/challenge10",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"Sec-Fetch-Dest": "empty",
"Referer": "http://www.python-spider.com/api/challenge10",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "zh,en;q=0.9,zh-CN;q=0.8",
}
cookie_jar = set_cookie('www.python-spider.com')
for i in range(1, 101):
data = {"page": str(i)}
response = session.post(url, headers=header, cookies=cookie_jar, data={"page": str(i)})
print(response.text)
data1 = json.loads(response.text)['data']
s.extend([i['value'].strip('\r') for i in data1])
print(s)
print(sum(int(i) for i in s))

浙公网安备 33010602011771号