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同城房源信息。