Sec-Fetch-Dest: document Sec-Fetch-Mode:navigate Sec-Fetch-Site: none Sec-FetchUser: ?1
时间: 2024-03-11 19:07:15 浏览: 225
这四个HTTP请求头都是由浏览器自动生成的,用于告诉服务器请求的上下文信息,具体含义如下:
- Sec-Fetch-Dest: document:指定请求的目标资源类型为文档类型,如HTML、XML等;
- Sec-Fetch-Mode: navigate:指定请求模式为导航模式,如点击链接、地址栏输入、前进后退等;
- Sec-Fetch-Site: none:指定请求来源类型为无来源,表示该请求不会从其他站点发起;
- Sec-Fetch-User: ?1:指定请求的用户身份,值为1表示用户已经激活,值为?1表示用户未激活。
相关问题
import requests import os from bs4 import BeautifulSoup cookie = os.getenv('MY_COOKIE') # 保存到环境变量中 def get_with_cookie(url): headers = { 'cookie': cookie, 'pragma': 'no-cache', 'referer': 'https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=%E7%88%B1%E6%B7%98%E5%AE%9D%E4%B9%B0%E4%B8%9C%E8%A5%BF&clk1=066356e5e429004e6730976351cc1afc&upsId=066356e5e429004e6730976351cc1afc', 'sec-ch-ua': '"Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': "Windows", 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'same-origin', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50' } resp = requests.get(url=url, headers=headers) return resp.text # 解析HTML内容,提取商品名称、价格和销量信息 def parse_html(html): soup = BeautifulSoup(html, 'html.parser') title = soup.select_one('h3.tb-main-title[data-title]') return title # 测试接口: url = 'https://item.taobao.com/item.htm?id=699089474285&ali_refid=a3_430673_1006:1102522391:N:%2BAkz14GC%2BXi%2Bma9dw7y9M4p5Yhq5iT8I:f9e826228fbc823934848d20e28dff81&ali_trackid=162_f9e826228fbc823934848d20e28dff81&spm=a2e0b.20350158.31919782.5' resp_text = get_with_cookie(url) title = parse_html(resp_text) # 打印商品信息 print(title.text.strip())使用try-except语句捕获异常
可以使用 try-except 语句来捕获可能出现的异常,例如网络请求失败或者 HTML 内容解析失败等情况。可以在 try 语句块中执行操作,如果出现异常则跳转到 except 语句块进行处理,例如打印错误信息或者返回默认值等。
修改代码如下:
```python
import requests
import os
from bs4 import BeautifulSoup
cookie = os.getenv('MY_COOKIE') # 保存到环境变量中
def get_with_cookie(url):
headers = {
'cookie': cookie,
'pragma': 'no-cache',
'referer': 'https://uland.taobao.com/sem/tbsearch?refpid=mm_26632258_3504122_32538762&keyword=%E7%88%B1%E6%B7%98%E5%AE%9D%E4%B9%B0%E4%B8%9C%E8%A5%BF&clk1=066356e5e429004e6730976351cc1afc&upsId=066356e5e429004e6730976351cc1afc',
'sec-ch-ua': '"Microsoft Edge";v="113", "Chromium";v="113", "Not-A.Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': "Windows",
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50'
}
try:
resp = requests.get(url=url, headers=headers)
return resp.text
except requests.exceptions.RequestException as e:
print("请求异常:", e)
return None
# 解析HTML内容,提取商品名称、价格和销量信息
def parse_html(html):
try:
soup = BeautifulSoup(html, 'html.parser')
title = soup.select_one('h3.tb-main-title[data-title]')
return title
except Exception as e:
print("解析异常:", e)
return None
# 测试接口:
url = 'https://item.taobao.com/item.htm?id=699089474285&ali_refid=a3_430673_1006:1102522391:N:%2BAkz14GC%2BXi%2Bma9dw7y9M4p5Yhq5iT8I:f9e826228fbc823934848d20e28dff81&ali_trackid=162_f9e826228fbc823934848d20e28dff81&spm=a2e0b.20350158.31919782.5'
resp_text = get_with_cookie(url)
if resp_text is not None:
title = parse_html(resp_text)
if title is not None:
# 打印商品信息
print(title.text.strip())
else:
print("解析失败")
else:
print("请求失败")
```
在代码中添加了 try-except 语句,当请求或者解析出现异常时会打印错误信息。同时在测试接口时也判断了请求和解析是否成功,如果失败则打印错误信息。这样可以增强代码的健壮性,避免出现不必要的异常。
页面请求头Sec-Fetch-*的作用
Sec-Fetch-* 是一组 HTTP 请求头部字段,用于提供有关请求来源和行为的信息,以帮助浏览器进行安全决策。下面是一些常见的 Sec-Fetch-* 请求头及其作用:
1. Sec-Fetch-Site:指示请求的目标是同源站点(same-origin)还是跨源站点(cross-origin)。可能的取值有 "same-origin"、"cross-site" 和 "none"。它可用于检查请求是否来自同一站点,以帮助防止跨站点请求伪造(CSRF)攻击。
2. Sec-Fetch-Mode:指示请求的模式,即请求是正常的页面导航请求、预取(prefetch)、预加载(preload)还是其他类型。常见的取值有 "navigate"、"cors"、"nested-navigate"、"no-cors" 等。它可以告诉服务器是否可以接受跨域请求,并控制浏览器在发送请求时所采取的安全措施。
3. Sec-Fetch-Dest:指示请求的目标资源类型,如 "document"、"script"、"style" 等。它可以告诉服务器需要返回什么类型的资源,并允许服务器采取适当的安全措施。
4. Sec-Fetch-User:指示用户参与请求的方式,如 "same-origin"(用户与目标站点同源),"cross-site"(用户与目标站点不同源)等。它可以用于区分不同用户的请求,并在服务器端实施更严格的安全策略。
这些 Sec-Fetch-* 请求头部字段提供了更多关于请求的上下文信息,帮助服务器和浏览器进行更精确的安全判断和决策。开发人员可以利用这些信息来优化资源加载、防止安全漏洞,并提供更好的用户体验。
阅读全文