python爬虫获取跳转后的响应url

本文介绍了一种解决爬虫中遇到的长URL重定向问题的方法,通过分析响应头获取跳转后的URL,避免了因字段限制导致的数据入库失败。示例代码使用Python的requests库实现。

** 在爬虫中经常会遇到网页给的某个url是跳转前的url,这类请求url一般很长,假如数据库建表时字段限制,则会无法入库,从而导致拿不到数据,看了下网上其他教程,较为繁琐.我在这提供一种思路及代码片段供大家参考.
浏览器向请求url发送请求,如获取到正常的响应,则一般相应状态码时300~305,随后会重定向到另一url(响应url),想到这一点其实就很好解决了.
可打印出相应头内容,在对应json中找到响应url,因为响应内容比较少,可以直接将url提出.我以一淘宝中分离天猫商品的url为例.
**

import requests
def get_redirect_url():
	url = """https://mclick.simba.taobao.com/cc_im?p=INC.redible&s=936271675&k=705&e=cf5Imw38zyT5LeEXLaoxX6gUJlv1pJiLeYS7ah10x8Plp95OWMW%2BVsso8ajx2qSZMHlKHH3GzaQJHiACcFM5PxMDWFwAo9PcY8S1Kuu7YOyaGIYBEZ9QdoMkKz82auCyNZ8bbUQVevFDzlFKxKHX%2Bp%2B%2FHAxpbvW62yiplFhHxAH%2BawzgNyHhNToiFWC%2FBivB3jGPPFqsRTmgWZf7Jshf%2F3NiXmDmL2WTZIU5wKgaeMLtxOLeyKFscBa2Gk%2FOQhS8QXtTBDucRxBcs%2BVbDLrgv3sZMGT3feX36D97LAShJd9MD5XRvHMkUiZ1X4oJf5e8A6wPbXazQ2BhHsqQJmOwW9ar422dxWmq6T1gXauzR9E6oGhtUAciYbZaIvTFPP5WiT5P4ZqSyXv%2FAAyqVXSIM8XLmjd2EBjqrva4CfegCkInOOBujZnCbYEbowsFHgfR4klATU%2BeMdP8aDAcIpvzCSUcQNNzEWczs6wXvWHBKPJKcRl8kP87KeIj1Nss8uZy6C8bX1UJGOX%2FKSRGD7W4PJ8izCG1Zvrbv1PWRmQ4wv%2B2uMM0StYEtjos6rPV5rBcSkwsiLYYrk1N%2BVEWn%2Fpm2D4q1HyKX658ob7TuonqLw7YJdkISO06Ojpj%2BnSXK0fDqKFI84lIBbCoaWX72cFm8FZSwYoxbzwwrE%2FS4mjROCmofgQh%2BXArHCoRdQ2u3FB%2B"""

	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'
}

       response = requests.get(url,headers=headers)

       #print(response.headers)
       return response.headers['Url-Hash']

get_redirect_url()      

即可获取到跳转后的url

### 爬虫无法获取HTML源码的常见原因及解决方法 在使用 Python 进行网页爬取时,有时会遇到无法获取 HTML 源码的问题。这可能是由多种原因造成的,包括网页使用了 JavaScript 动态加载内容、服务器反爬机制、请求头不完整或 IP 被封等。以下是常见的解决方法。 #### 1. 检查请求头信息 一些网站会检查请求头中的 `User-Agent`,如果检测到是爬虫,则会返回空内容或跳转。可以通过在请求中添加合法的请求头来模拟浏览器行为: ```python import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } response = requests.get('https://example.com', headers=headers) print(response.text) ``` #### 2. 使用 Selenium 或 Playwright 模拟浏览器 如果网页内容是通过 JavaScript 动态加载的,`requests` 和 `BeautifulSoup` 无法获取完整的 HTML 内容。此时可以使用 `Selenium` 或 `Playwright` 这类工具模拟真实浏览器行为: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('https://example.com') print(driver.page_source) driver.quit() ``` #### 3. 处理 AJAX 请求 有些网页的数据是通过 AJAX 请求加载的。此时可以直接分析网页的网络请求,找到数据接口并直接请求该接口获取 JSON 数据: ```python import requests url = 'https://api.example.com/data' response = requests.get(url) print(response.json()) ``` #### 4. 使用代理 IP 防止被封 如果频繁请求导致 IP 被封,可以使用代理 IP 来轮换请求地址: ```python proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', } response = requests.get('https://example.com', proxies=proxies) print(response.text) ``` #### 5. 设置请求超时与重试机制 有时网络不稳定或服务器响应慢,设置合理的超时时间和重试机制可以提高成功率: ```python from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry session = requests.Session() retry = Retry( total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504] ) session.mount('http://', HTTPAdapter(max_retries=retry)) session.mount('https://', HTTPAdapter(max_retries=retry)) response = session.get('https://example.com', timeout=10) print(response.text) ``` #### 6. 使用异步爬虫框架 对于大规模爬取任务,可以使用异步爬虫框架如 `aiohttp` 或 `Scrapy` 提高效率: ```python import aiohttp import asyncio async def fetch(session, url): async with session.get(url) as response: return await response.text() async def main(): async with aiohttp.ClientSession() as session: html = await fetch(session, 'https://example.com') print(html) asyncio.run(main()) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值