python如何提取链接中的域名
在Python中提取URL的域名并作为请求头的Host值,可以通过以下步骤实现:
- 使用urllib.parse解析URL:提取网络位置部分(netloc)
- 直接使用netloc作为Host值:HTTP请求的Host头默认由netloc决定
from urllib.parse import urlparse# 原始URL
url = 'https://www.chinatax.gov.cn/chinatax/n810214/n810641/c102061/c102062/c5205100/5205100/files/%E5%9B%BD%E5%AE%B6%E7%A8%8E%E5%8A%A1%E6%80%BB%E5%B1%80%E5%85%B3%E4%BA%8E%E5%85%AC%E5%B8%83%E5%BA%9F%E6%AD%A2%E7%9A%84%E7%A8%8E%E5%8A%A1%E9%83%A8%E9%97%A8%E8%A7%84%E7%AB%A0%E7%9B%AE%E5%BD%95%E7%9A%84%E5%86%B3%E5%AE%9A.doc.doc'# 解析URL
parsed = urlparse(url)# 提取域名(netloc)
domain = parsed.netloc
print("提取的域名:", domain) # 输出: www.chinatax.gov.cn# 在HTTP请求中设置Host头
headers = {"Host": domain,# 其他必要的请求头...
}# 示例:使用requests库发送请求
import requests
response = requests.get(url, headers=headers)
print("响应状态码:", response.status_code)
关键点说明:
urlparse(url).netloc
会自动解析出完整的域名(含二级域名)- 实际发送HTTP请求时,即使不显式设置Host头,大多数HTTP库也会自动使用netloc的值
- 当需要强制覆盖Host头时(如代理场景),才需要手动设置
特殊场景处理:
如果遇到需要同时处理多个不同域名的URL,可以封装成函数:
def get_host_from_url(url):return urlparse(url).netloc# 批量处理示例
urls = [url1, url2, url3]
hosts = [get_host_from_url(u) for u in urls]