You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取HTTP响应提取指定内容?解决爬虫NoneType迭代错误

PDF下载爬虫问题排查与优化

问题描述

  1. 开发PDF下载爬虫时,计划搜索页面中同时存在<i>和<a>标签的元素,确认后写入TXT文件用于后续URL提取。
  2. 执行if FILETYPE in file_link:代码时触发错误:
if FILETYPE in file_link:
TypeError: argument of type 'NoneType' is not iterable
  1. 同时需要了解如何读取HTTP响应并提取特定部分。

现有代码如下:

from bs4 import BeautifulSoup as bs
import requests
import constants as c

URL = c.url
DOMAIN = c.domain
FILETYPE = '.html'


def get_soup(url):
    return bs(requests.get(url).text, 'html.parser')


for link in get_soup(URL).find_all('a'):
    file_link = link.get('href')
    if FILETYPE in file_link:
        print(f"{DOMAIN}{file_link}")

问题解决

1. 修复NoneType错误

错误根源是部分<a>标签没有href属性,link.get('href')返回None,而None无法参与in成员判断。解决方式是先校验file_link不为空,再进行文件类型检查:

for link in get_soup(URL).find_all('a'):
    file_link = link.get('href')
    # 先确认file_link存在,再检查文件类型
    if file_link and FILETYPE in file_link:
        print(f"{DOMAIN}{file_link}")

2. 筛选同时包含<i>和<a>的元素

要确保<a>标签内存在<i>标签,可通过BeautifulSoup的嵌套查找实现:

# 查找所有包含<i>子标签的<a>标签
for a_tag in get_soup(URL).find_all('a', recursive=True):
    if a_tag.find('i'):  # 判断<a>标签内是否存在<i>子标签
        file_link = a_tag.get('href')
        if file_link and FILETYPE in file_link:
            # 写入TXT文件(追加模式)
            with open('valid_links.txt', 'a', encoding='utf-8') as f:
                f.write(f"{DOMAIN}{file_link}\n")

3. 读取HTTP响应并提取特定部分

通过requests.get(url)获取响应对象后,可访问以下属性提取对应内容:

  • response.text:获取解码后的响应文本内容
  • response.content:获取二进制响应内容(适合PDF等文件下载)
  • response.headers:获取响应头信息
  • response.status_code:获取HTTP状态码(用于校验请求是否成功)

示例:提取响应中特定区域的内容

response = requests.get(URL)
# 校验请求是否成功
if response.status_code == 200:
    soup = bs(response.text, 'html.parser')
    # 提取id为pdf-container的div区域
    target_area = soup.find('div', id='pdf-container')
    if target_area:
        # 提取该区域内的所有<a>标签
        valid_links = target_area.find_all('a')
        # 后续处理链接逻辑...

内容的提问来源于stack exchange,提问作者C4r

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:50:22