Python爬虫筛选指定内容的实现方案

山海之间
山海之间
发布时间:2026-10-15| 7人浏览过
原创

本文介绍在Python爬虫中获取非唯一指定内容的方法。当XPath无法直接定位目标时,可通过遍历节点并结合条件判断进行筛选。文章提供基于urllib和lxml的完整代码示例,展示如何构建请求、解析HTML并过滤关键词,同时指出原代码存在冗余问题,旨在为开发者提供清晰的筛选逻辑参考。

在爬取网站指定内容时,通常可直接使用XPath从网页结构中获取数据。然而,当目标内容在页面中不唯一,且无法通过单一XPath表达式精确选择所需或指定的内容时,直接提取会变得困难。

解决方案如下:

可采用for循环遍历节点的方式进行判断。若指定内容存在于当前遍历的节点中,则将其爬取保存;否则丢弃该节点。

具体实现代码如下(以学校网站为例):

import urllib.request
from lxml import etree
def creat_url(page):
    if(page==1):
        url='https://www.qjnu.edu.cn/channels/9260.html'
    else:
        url='https://www.qjnu.edu.cn/channels/9260_'+str(page)+'.html'
    headers={
        'User-Agent':' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
    }
    request = urllib.request.Request(url=url,headers=headers)
    return request
def creat_respons(request):
    respons = urllib.request.urlopen(request)
    content = respons.read().decode('utf-8')
    return content
def down_2(url):
    url = url
    headers = {
        'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Safari/537.36 Edg/100.0.1185.29'
    }
    request = urllib.request.Request(url=url, headers=headers)
    response = urllib.request.urlopen(request)
    content2 = response.read().decode('utf-8')
    tree2 = etree.HTML(content2)
    return tree2
def down_loads(content):
    tree = etree.HTML(content)
    name_list = tree.xpath('//div[@class="media"]/h4/a/text()')
    url_list = tree.xpath('//div[@class="media"]/h4/a/@href')
    for i in range(len(name_list)):
        if key in name_list[i]:
            with open('学校党员主题网址.txt', 'a', encoding='UTF-8') as fp:
                fp.write(url_list[i]+'\n')
            url = url_list[i]
            tree = down_2(url)
            tex_list = tree.xpath('//div[@class="field-item even"]//p/span/text()')
            name = name_list[i]
            with open(name + '.txt', 'w', encoding='UTF-8') as fp:
                fp.write(str(tex_list))
if __name__ == '__main__':
    all_page=int(input('请输入要爬取页码:'))
    key = str(input('请输入关键词:'))
    s_page=1
    for page in range(s_page,all_page+1):
        request=creat_url(page)
        content=creat_respons(request)
        down_loads(content)

该段代码在逻辑上能够运行,执行无误。但代码存在较多冗余,结构较为复杂,目前仍在研究更简化的版本。

关于Python爬虫提取指定内容的解决方法介绍至此。如需了解更多相关技巧,可搜索本站往期文章或继续阅读后续内容,感谢支持。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。