使用BeautifulSoup爬取房源仅获少量数据,求问题排查与解决方法
问题分析与解决方法
可能的问题点
- 请求头被识别为爬虫:
requests.get()默认的请求头(尤其是User-Agent)会被网站反爬机制标记,返回的内容是经过限制的部分数据。 - 页面采用动态渲染:网站可能改用JavaScript加载更多房源,静态请求只能拿到初始加载的少量内容。
- CSS选择器失效:你使用的
css-n8rq67 es62z2j16这类动态生成的CSS类名,网站更新后已变更,导致无法匹配到完整的房源元素。 - 反爬机制限制访问:多次请求触发了频率限制,或者需要保持会话才能获取完整数据。
对应解决方法
添加模拟浏览器的请求头
修改请求代码,带上真实浏览器的User-Agent,同时更新CSS选择器为当前页面的有效类名:import requests from bs4 import BeautifulSoup url = "https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/poznan?distanceRadius=0&market=ALL&locations=%5Bcities_6-1%5D&viewType=listing&lang=pl&searchingCriteria=sprzedaz&searchingCriteria=mieszkanie&searchingCriteria=cala-polska" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } html_text = requests.get(url, headers=headers).text soup = BeautifulSoup(html_text, 'lxml') # 先通过浏览器开发者工具查看当前房源article标签的真实class名,替换此处 houses = soup.find_all('article', class_='css-1e2w4si es62z2j16') for i in houses: print(i.text)使用动态渲染工具获取完整内容
如果网站依赖JavaScript加载数据,静态请求无法获取全部内容,改用Selenium模拟浏览器操作:from selenium import webdriver from selenium.webdriver.common.by import By import time url = "https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/poznan?distanceRadius=0&market=ALL&locations=%5Bcities_6-1%5D&viewType=listing&lang=pl&searchingCriteria=sprzedaz&searchingCriteria=mieszkanie&searchingCriteria=cala-polska" driver = webdriver.Chrome() driver.get(url) # 模拟滚动加载更多内容(按需调整滚动次数) for _ in range(3): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 获取所有房源元素 houses = driver.find_elements(By.TAG_NAME, 'article') for house in houses: print(house.text) driver.quit()规范爬取行为避免触发限制
- 给请求添加合理的
time.sleep()间隔,避免频繁访问 - 查看网站
robots.txt文件,确认允许爬取的内容范围
- 给请求添加合理的
维持会话获取完整数据
部分网站需要保持会话才能返回完整内容,使用requests.Session()维持会话:session = requests.Session() session.headers.update(headers) # 先请求首页获取必要Cookie session.get("https://www.otodom.pl") # 再请求目标页面 response = session.get(url) soup = BeautifulSoup(response.text, 'lxml')
内容的提问来源于stack exchange,提问作者MTPy
相关产品推荐
相关产品推荐

