一、分析目标站点
本文以爬取宁波地区的房产信息为例
1、宁波整个市页面
宁波地区的网址都是以上面的格式,再加上各个区的拼音,即可进入各个区的网页。
各个区的名称:
areas = {'海曙区': 'haishuqu1', '江北区': 'jiangbeiqu1',
'镇海区': 'zhenhaiqu1', '北仑区': 'beilunqu1',
'鄞州区': 'yinzhouqu2', '余姚市': 'yuyaoshi',
'慈溪市': 'cixishi', '奉化区': 'fenghuaqu',
'象山县': 'xiangshanxian', '宁海县': 'ninghaixian'}
2、解析各个区的页面
分析海曙区的页面发现随着页数的增加,页面的变化规律为 pg + 当页的页数
而各个区页面的页数是不相同的,比如海曙区的有100页,而宁海县的确只有一页。
通过查看源代码发现,各个区的最大页数在totalPage属性中。
接下我们使用requests库与BeautifulSoup库提取出出各个区的最大页数
import requests
from bs4 import BeautifulSoup
url = 'https://nb.ke.com/ershoufang/haishuqu1/pg2/'
response = requests.get(url)
max_num = BeautifulSoup(response.text, 'lxml').find(class_='house-lst-page-box')
min = max_num.attrs['page-data'].find(":")
max = max_num.attrs['page-data'].find(",")
page = int(max_num.attrs['page-data'][min+1:max])
print(page)
再利用for循环迭代各个区的最大页数,将其与各区url连接起来便可得到各个区所有页面的url
for i in range(1, page+1):
print('https://nb.ke.com/ershoufang/haishuqu1/pg{}/'.format(i))
找出当页每个房源信息的url
url = 'https://nb.ke.com/ershoufang/haishuqu1/pg2/'
response = requests.get(url)
soups = BeautifulSoup(response.text, 'lxml').find_all('li', class_='clear')
for soup in soups:
every_url = soup.find(class_='title').a.attrs['href']
print(every_url)
3、解析各个房源的页面
在这里我们取小区、单价、总价和以下信息。
房源基本信息都在base属性下的li标签里
房源基本信息中所要提取的信息使用正则匹配,因为这几个信息可能会不完全而且位置有时候会发生变化。
url = 'https://nb.ke.c