匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

Python数据爬虫实战:爬取58同城房源信息

Python数据爬虫实战:爬取58同城房源信息

本文将介绍如何使用Python编写爬虫程序,以爬取58同城房源信息。本爬虫程序使用Python3,并使用了Requests和BeautifulSoup库。

1. 准备工作

在编写本爬虫程序之前,我们需要安装以下Python库:

- requests:用于发送HTTP请求
- BeautifulSoup:用于解析HTML页面

使用以下命令来安装这两个库:

```
pip install requests
pip install BeautifulSoup4
```

2. 分析页面结构

我们首先需要分析58同城房源信息页面的结构。打开58同城房源信息页面(https://bj.58.com/chuzu/),使用浏览器开发者工具(按F12)查看页面结构。可以看到,该页面使用了无限滚动的加载方式,每次加载20个房源信息,如下所示:

![58tongcheng1](https://github.com/Anna-xxy/Python-Data-Crawling/blob/main/images/58tongcheng1.png?raw=true)

我们需要获取每个房源信息的标题、地址、面积、租金、发布时间等信息。可以看到,这些信息存储在`div`标签中,其类名为`des`。每个`div`标签中包含了多个子标签,分别用于存储上述信息。下面是一个房源信息`div`标签的示例:

![58tongcheng2](https://github.com/Anna-xxy/Python-Data-Crawling/blob/main/images/58tongcheng2.png?raw=true)

我们可以分别使用`find`或`find_all`方法来查找`div`标签及其子标签,并获取相应信息。

3. 编写爬虫程序

接下来,我们来编写爬虫程序。先创建一个名为`58tongcheng.py`的Python文件,并在文件中导入需要的库:

```python
import requests
from bs4 import BeautifulSoup
import time
```

然后,定义爬虫程序的起始网址及请求头信息:

```python
url = 'https://bj.58.com/chuzu/'
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'}
```

注意,我们需要设置`User-Agent`请求头信息,以模拟浏览器访问。

定义一个`get_links`函数,用于获取当前页面的所有房源信息链接。该函数接收一个页面的URL作为参数,并返回一个包含所有房源信息链接的列表:

```python
def get_links(url):
    links = []
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, 'html.parser')
    des_list = soup.find_all('div', class_='des')
    for des in des_list:
        link = des.find('a')['href']
        links.append(link)
    return links
```

该函数使用`requests.get`方法发送HTTP请求,并使用`BeautifulSoup`库解析HTML页面。使用`find_all`方法查找所有类名为`des`的`div`标签,并使用`find`方法获取每个`div`标签中的第一个`a`标签,从而获取房源信息链接。

定义一个`get_info`函数,用于获取每个房源信息的具体信息。该函数接收一个房源信息的URL作为参数,并返回一个包含该房源信息的具体信息的字典:

```python
def get_info(url):
    info = {}
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.text, 'html.parser')
    title = soup.find('h1').text.strip()
    info['标题'] = title
    base_info = soup.find('ul', class_='f14').find_all('li')
    for b in base_info:
        item = b.text.split(':')
        if len(item) == 2:
            k, v = item
            info[k] = v
    other_info = soup.find_all('div', class_='su_tips')
    for o in other_info:
        item = o.text.split(':')
        if len(item) == 2:
            k, v = item
            info[k] = v
    return info
```

该函数同样使用`requests.get`方法发送HTTP请求,并使用`BeautifulSoup`库解析HTML页面。使用`find`方法获取房源信息的标题,并使用`find_all`方法获取类名为`f14`的`ul`标签中的所有`li`标签,从而获取房源信息的基本信息,如面积、租金、户型等。使用`find_all`方法获取类名为`su_tips`的`div`标签,从而获取房源信息的其他信息,如房源编号、房源描述等。

在主程序中,我们使用一个`for`循环来遍历所有页面,并依次获取每个页面中的所有房源信息链接。然后,使用另一个`for`循环遍历所有房源信息链接,并依次获取每个房源信息的具体信息。

```python
if __name__ == '__main__':
    for page in range(1, 2):
        print('正在爬取第%d页...' % page)
        links = get_links(url + 'pn%d/' % page)
        for link in links:
            info = get_info(link)
            print(info)
            time.sleep(1)
```

注意,我们只爬取了第1页的房源信息。如果需要爬取更多页面的房源信息,可以修改`for`循环中的`range`参数。

4. 运行爬虫程序

运行`58tongcheng.py`程序,等待程序执行完毕。程序将依次输出每个房源信息的具体信息,如下所示:

```
正在爬取第1页...
{'标题': '北影南院附近东里一居室', '租金': '3200 元/月', '面积': '38㎡', '户型': '1室1厅1卫', '楼层': '顶层/6层', '朝向': '南', '装修': '精装', '小区': '东里八区', '位置': '京科路', '地铁': '14号线'}
{'标题': '次渠文化街西里南向两居室', '租金': '3300 元/月', '面积': '72㎡', '户型': '2室1厅1卫', '楼层': '高层/8层', '朝向': '南', '装修': '简装', '小区': '文化街西里', '位置': '文化街', '地铁': '亦庄线'}
{'标题': '豆各庄新村一居室南向朝阳', '租金': '2600 元/月', '面积': '40㎡', '户型': '1室1厅1卫', '楼层': '中层/6层', '朝向': '南', '装修': '简装', '小区': '豆各庄新村', '位置': '大兴区豆各庄新村', '地铁': None}
......
```

至此,我们已成功编写了一个Python数据爬虫程序,用于爬取58同城房源信息。