bs4 find_all 排除某个

时间: 2023-09-03 22:08:20 浏览: 53
标签 如果想要排除某个标签,可以使用bs4的CSS选择器语法中的:not()伪类。 下面是一个例子,假设我们要查找所有的p标签,但是不包括class为"exclude"的p标签: ```python from bs4 import BeautifulSoup html = """ <html> <body> <p>这是一个普通的p标签</p> <p class="exclude">这个p标签将被排除</p> <p>又是一个普通的p标签</p> </body> </html> """ soup = BeautifulSoup(html, 'html.parser') p_tags = soup.select('p:not(.exclude)') for p in p_tags: print(p.text) ``` 输出: ``` 这是一个普通的p标签 又是一个普通的p标签 ``` 在CSS选择器语法中,:not()伪类可以接受一个选择器作为参数,表示排除符合该选择器的元素。在上面的例子中,我们使用了".exclude"选择器作为:not()的参数,表示排除class为"exclude"的元素。
相关问题

Traceback (most recent call last): File "C:\Users\test\Desktop\DIDI测试.py", line 55, in <module> extract_html_info(file_path, csv_writer) File "C:\Users\test\Desktop\DIDI测试.py", line 25, in extract_html_info timestamp = p_tag.find_previous('body').find_previous('head').find('meta', {'http-equiv': 'Content=-Type'})[ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TypeError: 'NoneType' object is not subscriptable

这个错误是因为在提取时间戳时,找不到对应的元素导致的。可能是由于HTML结构的变化或者标签属性的不一致导致无法成功提取。你可以尝试修改代码以适应不同的HTML结构。以下是修改后的代码: ```python import os import re import csv from bs4 import BeautifulSoup # 设置html文件路径 folder_path = r'C:\Users\test\Desktop\DIDItest' output_file = r'C:\Users\test\Desktop\output.csv' # 提取html文件内所需要数据 def extract_html_info(file_path, csv_writer): with open(file_path, 'r', encoding='utf-8') as file: # 读取HTML源代码 html = file.read() soup = BeautifulSoup(html, 'html.parser') # 提取所有的<p>标签 p_tags = soup.find_all('p') for p_tag in p_tags: # 提取ID talk_id = p_tag.find_previous(string=lambda text: isinstance(text, str) and '[talkid:' in text) talk_id = talk_id.strip('[talkid:]') # 提取时间 timestamp = '' meta_tags = soup.find_all('meta', {'http-equiv': 'Content-Type'}) for meta_tag in meta_tags: if 'charset' not in meta_tag['content']: timestamp = meta_tag['content'] break # 提取发送号码 send_number = p_tag.find('span', {'class': 'hint-success'}).text # 提取接收号码 receive_number = p_tag.find_all('span', {'class': 'hint-success'})[1].text # 提取信息内容 message = p_tag.previous_sibling.strip() # 判断是否是音频 if '音频' in message: file_url = p_tag.find('a')['href'] csv_writer.writerow([talk_id, timestamp, send_number, receive_number, file_url]) else: csv_writer.writerow([talk_id, timestamp, send_number, receive_number, message]) # 创建CSV文件并写入数据 with open(output_file, 'w', newline='', encoding='utf-8') as file: csv_writer = csv.writer(file) csv_writer.writerow(['ID', '时间', '发送号码', '接收号码', '内容']) # 遍历文件夹及子文件夹,提取HTML文件信息 for root, dirs, files in os.walk(folder_path): for file in files: if file.endswith('.html'): file_path = os.path.join(root, file) extract_html_info(file_path, csv_writer) print("数据已成功写入CSV文件。") ``` 在这个修改后的代码中,我修改了提取时间戳的部分。我使用了一个循环来遍历所有的`meta`标签,并通过判断`content`属性中是否包含`charset`来排除不需要的标签。找到合适的标签后,将其`content`属性赋值给`timestamp`变量。 希望这次能够顺利运行并正确提取时间戳!如果你还有其他问题,请随时提问。

import requests from bs4 import BeautifulSoup import csv # 发送HTTP请求获取网页内容 url = "https://item.jd.com/100016034394.html" # 替换为目标商品评价页面的URL response = requests.get(url) html = response.text # 使用BeautifulSoup解析网页内容 soup = BeautifulSoup(html, "html.parser") # 获取所有评价信息 comments = soup.find_all("div", class_="comment-item") # 创建CSV文件并写入数据 filename = "商品评价.csv" with open(filename, "w", encoding="utf-8-sig", newline="") as csvfile: writer = csv.writer(csvfile) writer.writerow(["用户", "评分", "评价内容"]) # 写入表头 # 写入每条评价的数据 for comment in comments: user = comment.find("div", class_="user-info").find("span").text.strip() rating = comment.find("div", class_="comment-star").find("i")["class"][1].split("-")[1] content = comment.find("div", class_="comment-con").find("p").text.strip() writer.writerow([user, rating, content]) print(f"成功爬取并保存为 {filename}") HTTPSConnectionPool(host='www.jd.com', port=443): Max retries exceeded with url: /?from=pc_item_sd (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x0000015FCC87E7C0>, 'Connection to www.jd.com timed out. (connect timeout=10)'))

这个错误是连接超时错误,可能是因为请求的网站响应时间过长或网络连接不稳定导致的。你可以尝试以下解决方案: 1. 增加请求超时时间:在发送请求时,你可以指定一个更长的超时时间来等待服务器响应。将`requests.get()`函数中的`timeout`参数设置为一个适当的值,例如`timeout=30`,表示等待30秒钟来建立连接和获取响应。 ```python response = requests.get(url, timeout=30) ``` 2. 检查网络连接和目标网站的可访问性:确保你的网络连接正常,并且能够正常访问目标网站。你可以尝试在浏览器中打开目标网址以检查是否能够成功加载页面。 3. 使用代理服务器:如果你的网络环境有限制或目标网站对爬虫有限制,可以尝试使用代理服务器来发送请求。通过设置`requests.get()`函数中的`proxies`参数,指定代理服务器的地址和端口。 ```python proxies = { 'http': 'http://proxy.example.com:8080', 'https': 'http://proxy.example.com:8080', } response = requests.get(url, proxies=proxies) ``` 4. 尝试其他网络环境:如果以上方法都无效,你可以尝试在其他网络环境下运行代码,例如使用不同的网络连接或切换到其他网络环境,以排除网络问题。 根据具体情况选择适合的解决方案,以确保能够成功建立连接并爬取目标网页的数据。

相关推荐

最新推荐

recommend-type

Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar

Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rarJava开发案例-springboot-19-校验表单重复提交-源代码+文档.rar Java开发案例-springboot-19-校验表单重复提交-源代码+文档.rar
recommend-type

基于android的公司员工考勤综合信息平台源码.zip

提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
recommend-type

珍藏很久的一套源码升级了很多

很强大的阿凤飞飞的身份就把饭啦啊开房记录看妇科阿里看到就考虑是否就解放路口空间按时到路口附近开了房间卡拉的时间分开垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho时到路口附近开了房间卡拉的时间分开垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho时到路口附近开了房间卡拉的时间分开垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho垃圾的浪费空间按可浪费阿克纠纷的看了觉得空房间看大神经费卡上的减肥快接啊看来积分卡时间分开拉丝机房里看见啦开恐怕为日文名弄法卡上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho上的健康饭卡里解放开了哈嘎考虑对方好几万呢uaho时到路口附近开
recommend-type

附件二六个指标与权重得分 - 副本.xlsx

附件二六个指标与权重得分 - 副本
recommend-type

自学助词自学助词自学助词

自学助词自学助词自学助词
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。