jupyter爬取58同城 选择任何一个城市的二手房页面,爬取一页即可,最后获得的数据需要是一个字典 { title: {info:[], price:[]}, ... }
时间: 2024-10-11 20:16:20 浏览: 40
python爬虫 爬取58同城上所有城市的租房信息详解
5星 · 资源好评率100%
Jupyter Notebook可以配合Python的网络爬虫库如`requests`和`BeautifulSoup`来爬取58同城这样的网站。以下是一个简单的步骤描述:
1. **安装所需库**:
首先确保你已经在环境中安装了`requests`, `beautifulsoup4`, 和 `lxml`(如果使用的是后者,因为58同城的HTML结构通常较复杂,`lxml`解析速度更快)。
```python
!pip install requests beautifulsoup4 lxml
```
2. **导入模块**:
引入需要用到的库,并设置`User-Agent`以防被网站识别为机器人。
```python
import requests
from bs4 import BeautifulSoup
import json
```
3. **获取网页内容**:
使用`requests.get()`获取指定城市的二手房页面,例如北京的二手房页面URL。
```python
url = "https://bj.58.com/chuzu/ditu/"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
```
4. **解析HTML**:
使用BeautifulSoup解析响应数据,提取每条房源的信息(标题和价格)。
```python
soup = BeautifulSoup(response.text, 'lxml')
# 找到包含房源信息的div或其他标签
houses = soup.find_all('div', class_='list-item') # 这里可能需要根据实际页面结构调整
house_info = []
for house in houses:
title = house.find('h3', class_='title') # 标题可能在一个嵌套的标签内
if title:
title_text = title.text.strip()
else:
title_text = None
price = house.find('span', class_='price') # 价格也需类似处理
price_text = price.text.strip() if price else None
info = {'title': title_text, 'price': price_text} # 存储每条房源信息
house_info.append(info)
```
5. **组织数据**:
将所有房源信息打包成字典,按照城市分组。
```python
data = {'title': [], 'price': []} # 初始化结果字典
city_data = {url.split('/')[-2]: house_info} # 分析URL确定城市名并添加到字典中
final_data = {city: {k: [item[k] for item in v] for k in ('title', 'price')} for city, v in city_data.items()}
```
6. **保存数据**:
最后,你可以将这个字典转换为JSON并保存,以便后续分析或分享。
```python
json.dump(final_data, open('58_tongcheng_data.json', 'w'), indent=2)
```
阅读全文