只有图片拼接的html页面图片之间有白条的解决方法

本文介绍了一种解决网页中图片排列出现间隙的方法,通过调整图片父容器的行高(line-height)为0来实现无缝拼接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候会有这样的页面,整个页面也就是几张切好的图片组成,但是把这些图片使用代码拼接好,又总会出现图片间有白条的问题,如下图:

 

 解决方法:给图片的父容器添加 line-height: 0; 就好了,因为body/div之类的标签默认的都会有行高属性,即时是图片,也会受这个默认样式的影响

转载于:https://www.cnblogs.com/xyyt/p/6084583.html

<think>我们面对的是一个动态加载的网页,特别是当进行筛选操作后,URL不变,但内容更新。这通常是通过AJAX技术实现的。要爬取这样的数据,我们需要分析网页背后的网络请求,找到实际传输数据的请求,然后模拟这个请求来获取数据。 步骤: 1. 使用浏览器的开发者工具(通常按F12打开)监控网络活动。 2. 进行筛选操作,观察在筛选过程中浏览器发送了哪些请求。 3. 找到包含我们所需数据的请求(通常是XHR请求),分析该请求的URL、请求方法、请求头以及请求体(如果有的话)。 4. 用Python模拟这个请求,获取数据(通常是JSON格式)。 5. 解析返回的数据,提取所需信息。 根据引用[1]和[3],我们知道这种网页是动态加载的,通过AJAX与服务器交互。引用[2]提供了一个例子,在翻页时,URL中的参数(如pn)发生了变化,但基本URL不变。 假设我们遇到的情况类似,筛选操作可能会改变请求中的某些参数。 具体操作: 1. 打开开发者工具,切换到“网络”(Network)选项卡,并选择“XHR”过滤。 2. 在网页上进行筛选操作,观察出现的请求。 3. 找到携带数据的请求,查看其详细信息(Headers和Payload)。 4. 复制这个请求的URL和必要的头部信息(如User-Agent, Referer, 以及可能的Token等)。 5. 根据请求方法(GET或POST)构建请求。 例如,如果是GET请求,参数通常在URL中,我们可以直接构造URL。如果是POST请求,我们需要构造表单数据。 下面是一个示例代码,假设我们找到一个POST请求,其参数为form-data格式: ```python import requests url = "https://example.com/api/data" # 替换为实际的请求URL # 请求头,至少需要User-Agent,根据实际情况添加其他头 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", "Referer": "https://example.com/page", # 替换为实际的Referer "X-Requested-With": "XMLHttpRequest" # 如果是AJAX请求,有时需要这个头 } # 筛选条件对应的参数,根据实际请求的Payload填写 data = { "param1": "value1", "param2": "value2", # ... 其他参数 } response = requests.post(url, headers=headers, data=data) # 如果返回的是JSON,可以直接解析 result = response.json() # 处理结果,提取数据 # ... ``` 如果是GET请求,参数通常在URL中,例如: ```python import requests # 注意URL中包含了查询参数 url = "https://example.com/api/data?param1=value1&param2=value2" 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", "Referer": "https://example.com/page" } response = requests.get(url, headers=headers) result = response.json() ``` 注意:有些网站可能会对请求进行验证,比如需要cookies,或者需要携带特定的token。这些都需要在请求头或请求参数中设置。 另外,如果网站有反爬措施,可能需要更复杂的处理,如使用会话(Session)保持cookies,或者处理动态生成的token等。 如果筛选操作涉及到多个步骤,可能需要先获取初始页面,提取一些动态生成的参数(如token),然后再发送筛选请求。 总结:关键是通过开发者工具找到实际的数据请求,然后模拟这个请求。 如果无法找到具体的请求,或者请求参数非常复杂,可以考虑使用Selenium等工具模拟浏览器操作,直接获取渲染后的页面内容。但这种方法效率较低。 根据引用[3]的经验,我们首先应该尝试通过分析网络请求来获取数据,这是更高效的方式。 §§相关问题§§ 1. 如何分析网页的AJAX请求? 2. 使用Selenium爬取动态网页的步骤是什么? 3. 如何应对爬虫中的反爬措施(如验证码、Token等)?</think>### 爬取动态筛选数据的解决方案 当网页筛选后网址不变时,通常是因为网站使用了 **AJAX 动态加载技术**。这类网页通过 JavaScript 在后台与服务器交互,无需刷新整个页面即可更新内容。以下是完整的爬取方案: --- ### 一、技术原理分析 1. **AJAX 工作机制** 筛选操作会触发 JavaScript 向服务器发送 **HTTP 请求**(通常是 POST 或带参数的 GET 请求),服务器返回结构化数据(如 JSON),前端再动态渲染页面[^1]。 2. **URL 不变的原因** 筛选参数通过以下方式传递: - 隐藏的表单数据 - URL 查询参数(如 `?page=2&filter=value`) - HTTP 请求头(如 `X-Requested-With: XMLHttpRequest`) --- ### 二、爬取步骤(以百度图片为例) #### 1. **分析网络请求** - 打开浏览器开发者工具(F12 → Network 标签) - 进行筛选操作(如翻页/选择分类) - 观察新增的 **XHR/Fetch 请求**(如图) ```mermaid graph LR A[筛选操作] --> B[开发者工具 Network 面板] B --> C{查找 XHR 请求} C --> D[分析请求参数] ``` #### 2. **提取关键参数** 以引用[2]的百度图片为例: ```python # 原始URL(第一页) url = 'https://image.baidu.com/search/flip?word=桥梁' # 第二页URL变化(关键参数 pn=20) url_page2 = 'https://image.baidu.com/search/flip?word=桥梁&pn=20' ``` **核心参数**: - `pn`: 页码(每页20条 → 第n页:`pn = (n-1)*20`) - `word`: 搜索关键词 - `gsm`: 加密参数(需动态获取) #### 3. Python 爬虫实现 ```python import requests import json def crawl_filtered_data(keyword, max_page): headers = {'User-Agent': 'Mozilla/5.0'} # 模拟浏览器 for page in range(max_page): params = { "word": keyword, "pn": page * 20, # 动态计算页码 "gsm": "3c" # 实际需从首页源码提取 } response = requests.get( url="https://image.baidu.com/search/flip", params=params, headers=headers ) # 解析JSON数据(实际需处理加密结构) data = response.json() print(f"第{page+1}页数据:", data["list"]) ``` --- ### 三、通用解决方案 | 情况 | 解决方法 | 工具 | |------|----------|------| | 参数在URL中 | 拼接查询参数 | `requests.get(params={...})` | | 参数在请求体 | 发送POST请求 | `requests.post(data={...})` | | 复杂加密 | 逆向JavaScript | PyExecJS / Selenium | | 无法解析请求 | 无头浏览器渲染 | Selenium / Playwright | --- ### 四、注意事项 1. **动态参数处理** 部分网站(如百度)的 `gsm` 参数需从首页 HTML 或 JS 代码中提取,可能需要正则表达式: ```python import re first_page = requests.get(first_url).text gsm = re.search(r'"gsm":"(\w+)"', first_page).group(1) ``` 2. **反爬对策** - 添加 `Referer` 和 `Cookie` 请求头 - 使用 IP 代理池(如 Scrapy 的 `RotatingProxies`) - 模拟人类操作延迟(`time.sleep(1)`) 3. **数据解析技巧** 动态数据通常返回 JSON,但可能被加密,需: ```python # 处理非标准JSON data_str = response.text.split("(")[1].strip(")") data = json.loads(data_str) ``` > 提示:90% 的动态网站可通过分析 **XHR 请求** 解决,剩余 10% 需用 Selenium 模拟浏览器[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值