Python使用BeautifulSoup从div类提取数据代码运行失败求助
代码问题排查与修正
存在的问题
- CSS选择器语法错误:原代码写的
ba608fb8 de8df3a3.li不符合规则,类名需要加.前缀,li是标签名要放在正确位置,同时要匹配同时携带两个类名的li标签,原写法完全错误导致根本匹配不到任何元素。 - append方法调用语法错误:
all_data.append[(price)]中方法调用应该用圆括号,误用方括号会直接触发语法报错。 - 未加请求头容易触发反爬:直接用requests发起无UA的请求,OLX平台会直接返回异常页面或拦截响应,拿到的soup本身就没有目标内容。
- 提取逻辑不完善:
find_all返回的是标签对象列表,直接存储得到的不是价格文本,不需要多元素匹配的情况下应该用find,同时需要提取标签内的文本内容。
修正后的可运行代码
import requests import pandas as pd from bs4 import BeautifulSoup # 加UA模拟浏览器请求,避免被反爬拦截 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } url = "https://www.olx.com.pk/items?page=1" r = requests.get(url, headers=headers) soup = BeautifulSoup(r.content, "html.parser") # 修正CSS选择器,匹配携带对应两个类的li商品标签 rows = soup.select("li.ba608fb8.de8df3a3") all_data = [] for row in rows: # 用find匹配单个价格标签,提取文本 price_tag = row.find("div", class_="_7978e49c _2e82a662") # 加判空避免部分商品没有价格时报错 price = price_tag.text.strip() if price_tag else "" all_data.append(price) print(all_data)
内容的提问来源于stack exchange,提问作者Abdurehman Dar
相关产品推荐
相关产品推荐

