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

使用BeautifulSoup爬取房产网站缺失日期及无法抓取meta itemprop标签问题

问题解答

1. 日期字段缺失原因及解决

你现有代码分三次独立遍历所有房源外层容器,分别提取标题、描述、日期三类数据。其中提取日期的循环只有当容器内真的存在class="announcement-block__date"的标签时,才会往date列表追加内容,VIP/促销房源如果没有这个标签,对应循环逻辑会直接跳过,不会主动追加N/A,自然就会出现date列表长度比标题、描述短的情况。

正确逻辑应该是先遍历每一个房源外层容器,在单个容器内分别提取三个字段,找不到对应标签就直接填充N/A,保证三个列表的每一项都对应同一个房源,长度完全对齐。

2. meta itemprop标签提取失败原因及解决

meta标签是自闭合标签,本身没有内部文本,你用get_text()方法肯定拿不到值,它的内容全部存放在content属性里。另外你现有代码的遍历逻辑只查找了class="announcement-block__date"的div标签,根本没有定位到meta标签,所以返回空值。

提取示例:如果要拿itemprop为datePublished的发布日期,只需要在单个房源容器内执行tag.find('meta', attrs={'itemprop':'datePublished'}).get('content', 'N/A')即可,get方法自带缺省值,找不到对应标签会直接返回N/A。


修正后完整代码

from urllib.request import urlopen,Request
from bs4 import BeautifulSoup as bsoup
import ssl
import pandas as pd

def get_headers():
   #Headers
   headers={'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
           'accept-language':'en-US,en;q=0.9',
           'cache-control':'max-age=0',
           'upgrade-insecure-requests':'1',
           'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
   return headers

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
count = 1 # for pagination

#Make list holder
title = []
description = []
date = []

urls = ['https://www.unegui.mn/l-hdlh/l-hdlh-zarna/oron-suuts-zarna/5-r/']

for x in urls:
   count=1
   y=x
   while(count < 2):  # will get only 1st page
       print(x)
       req = Request(x, headers=get_headers())  #req all headers
       htmlfile = urlopen(req)
       htmltext = htmlfile.read()
       soup = bsoup(htmltext,'html.parser')
       
       # 改为单次遍历所有房源容器,每个容器内提取三个字段
       for tag in soup.findAll('div',attrs={'class':'announcement-block-text-container announcement-block__text-container'}):
           # 提取标题
           title_tag = tag.find('a', attrs={'class':'announcement-block__title'})
           title_text = title_tag.get_text().strip() if title_tag else 'N/A'
           title.append(title_text if title_text else 'N/A')
           
           # 提取描述
           desc_tag = tag.find('div', attrs={'class':'announcement-block__description'})
           desc_text = desc_tag.get_text().strip() if desc_tag else 'N/A'
           description.append(desc_text if desc_text else 'N/A')
           
           # 提取日期,如果要拿meta标签的话替换下面这段即可
           date_tag = tag.find('div', attrs={'class':'announcement-block__date'})
           # 如果要提取meta itemprop的日期,把上两行换成↓
           # date_tag = tag.find('meta', attrs={'itemprop':'datePublished'})
           # date_text = date_tag.get('content', 'N/A').strip() if date_tag else 'N/A'
           date_text = date_tag.get_text().strip() if date_tag else 'N/A'
           date.append(date_text if date_text else 'N/A')

       # Go to next page
       count=count+1
       page = '?page='+str(count)
       x=y+page

data_frame = pd.DataFrame(list(zip(title,description,date)),columns=['Title', 'Description', 'Date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:45:04