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爬虫成功运行了,为什么没有获取到数据呢

1 回复

这个问题很常见,通常有几种可能。我来帮你快速定位一下。

首先,最直接的原因是你的请求没有得到预期的响应。用 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_allfind 用混了?或者提取属性、文本的方法不对?比如要取href应该用 ['href'],取文本应该用 .text.get_text()

建议:从状态码、数据加载方式、选择器、解析逻辑这四个方面逐一排查。

回到顶部