Python爬虫成功运行了,为什么没有获取到数据呢
#! /User/bin/env
-- coding:utf-8 --
from threading import Thread from queue import Queue import requests from bs4 import BeautifulSoup import pandas as pd from fake_useragent import UserAgent import time
def run_time(func): def wrapper(*args, **kw): start = time.time() func(*args, **kw) end = time.time() print('running', end-start, 's') return wrapper
class Spider(): def init(self): self.q = Queue() self.data = [] self.page_num = 10 self.thread_num = 10 self.headers={'User-Agent':UserAgent().random}
def produce_url(self):
baseurl = 'https://sh.lianjia.com/zufang/pg{}'
L=[]
for i in range(1, self.page_num + 1):
page_url = baseurl.format(i)
L.append(page_url)
for j in L:
try:
r=requests.get(j,headers=self.headers,timeout=30)
r.raise_for_status()
r.encoding=r.apparent_encoding
soup = BeautifulSoup(r.text,'html.parser')
a=soup.find_all("div",class_="info-panel")
for k in range(len(a)):
link=a[j].find("a")["href"]
self.q.put(link)
except:
continue
def get_info(self):
while not self.q.empty():
url = self.q.get()
print(‘crawling’, url)
req = requests.get(url, headers=self.headers)
soup=BeautifulSoup(req.text,‘html.parser’)
b=soup.find(“div”,class_=“content zf-content”)
detail={}
detail[‘月租金’]=int(b.find(“span”,class_=“total”).text.strip())
detail[‘面积’]=b.find_all(“p”,class_=“lf”)[0].text[3:].strip()
detail[‘房屋户型’]=b.find_all(“p”,class_=“lf”)[1].text[5:].strip()
detail[‘楼层’]=b.find_all(“p”,class_=“lf”)[2].text[3:].strip()
detail[‘房屋朝向’]=b.find_all(“p”,class_=“lf”)[3].text[5:].strip()
detail[‘地铁’]=b.find_all(“p”)[4].text[3:].strip().strip()
detail[‘小区’]=b.find_all(“p”)[5].text[3:].strip()
detail[‘位置’]=b.find_all(“p”)[6].text[3:].strip()
self.data.append(detail)
@run_time
def run(self):
self.produce_url()
ths = []
for _ in range(self.thread_num):
th = Thread(target=self.get_info)
th.start()
ths.append(th)
for th in ths:
th.join()
data=pd.DataFrame(self.data)
data.to_csv(‘链家网租房数据.csv’,encoding=‘utf_8_sig’)
print(‘Data crawling is finished.’)
if name == 'main': Spider().run()
Python爬虫成功运行了,为什么没有获取到数据呢
这个问题很常见,通常有几种可能。我来帮你快速定位一下。
首先,最直接的原因是你的请求没有得到预期的响应。用 response.status_code 检查一下HTTP状态码,如果不是200,说明请求本身就有问题。比如遇到了403(禁止访问)或者404(页面不存在)。
其次,即使状态码是200,数据也可能没在HTML里。现在很多网站都用JavaScript动态加载数据,你用requests库发请求拿到的初始HTML里是空的。这时候你得用Selenium或者Playwright这类能执行JS的工具。
还有一种情况,你的选择器(XPath或CSS Selector)写错了,定位不到元素。先用 print(response.text[:500]) 看看返回的HTML结构是不是你想要的,再用浏览器的开发者工具(F12)重新确认一下选择器路径。
最后,检查一下你的解析逻辑。是不是把 find_all 和 find 用混了?或者提取属性、文本的方法不对?比如要取href应该用 ['href'],取文本应该用 .text 或 .get_text()。
建议:从状态码、数据加载方式、选择器、解析逻辑这四个方面逐一排查。

