简单爬取链家房产网站青岛地区信息
本篇文章主要是实现一个简单的爬虫,对于新手可能会有点帮助。
信息爬取
1、我们先要找到目标网站的网址
2、获取网站的字符串信息(所有信息,不管有没有用)
3、然后我们需要在网页上找到我们需要的内容路径
4、循环把你要获取的内容按照路径依次获取
5、对你的内容进行要求的分析
目标网站的网址和显示
获取url并获得网页的html数据
1、首先获取url,然后使用requests的get方法获取网页中的数据,然后把其中的字符串类型的数据获取并存储在select中
// An highlighted block
url = "https://qd.fang.lianjia.com/loupan/pg{}/".format(x)
data = requests.get(url).text
select = html.fromstring(data)
2、然后获取你需要的内容,以便循环获取准确信息(作为一个迭代器)
网址: [https://qd.fang.lianjia.com/loupan/pg1(https://mp.csdn.net).
图片:
在这里我们需要自己去目标网站寻找自己需要的信息目录,我们在这里通常使用Xpath来验证自己的目录是否正确,上述的“//ul”意思是在下面出现的所有ul都会被找到,如果是“/ul”就是在当前目录下的ul,然后把它的class属性写出来,就如图中显示一样,我们看到在Xpath中输入上述的目录,右侧会输出此目录下的信息,如果没有Xpath的话,你需要自己判断目录是否正确,即把鼠标放在你选择的目录上,网页上就会出现高亮。
ul_list = select.xpath('//ul[@class="resblock-list-wrapper"]')
循环获取所需内容
根据要求循环获取你所需要的内容
// An highlighted block
for li in ul_list:
ad = li.xpath('//ul[@class="resblock-list-wrapper"]//div[@class="resblock-location"]/span[1]/text()')
#获取房产的地址
pri = li.xpath('//span[@class="number"]/text()')
#获取房产的价格
主要代码
def spider(x):
area = []
url = "https://qd.fang.lianjia.com/loupan/pg{}/".format(x)
data = requests.get(url).text
select = html.fromstring(data)
ul_list = select.xpath('//ul[@class="resblock-list-wrapper"]')
for li in ul_list:
ad = li.xpath('//ul[@class="resblock-list-wrapper"]//div[@class="resblock-location"]/span[1]/text()')
pri = li.xpath('//span[@class="number"]/text()')
for ii in range(10):
if li.xpath('//div[@class="resblock-area"]/span')[ii].text != None:
area.append(li.xpath('//div[@class="resblock-area"]/span')[ii].text)
else:
area.append(0)
for iii in range(10):
if area[iii]!=0:
area[iii]= area[iii].strip('建面 ')
a=''
for s in str(area[iii]):
if (s=='-'or s=='㎡'):
break
else:
a = a + s
area[iii] = a
a = int(area[iii]) / 10
b = int(a + 0.5)
area[iii]=b*10
#print(area[iii])
for j in range(10):
if(pri[j]!='价格待定' and len(pri[j])>3 and area[j]!=0):
dict = {"地区":ad[j],"单价":int(pri[j]),"面积":area[j]}
all.append(dict)
零碎操作
调用的包如下
import requests
import pandas as pd
import os
import string
from lxml import html
from matplotlib import pyplot as plt
# 设置中文字体,否则中文会出现方框状
plt.rcParams["font.sans-serif"] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import numpy as np
循环调用spider()函数
for i in range(1,70):
spider(i)
#由于链家网的房产一共69页,所以我们需要循环调用这69页
选实现:
用柱状图显示指定地区和指定面积的单价区间
A = 0
B = 0
C = 0
D = 0
E = 0
for listh in all:
if (listh["地区"] ==y and listh["面积"] == z):
if (listh["单价"]<10000 and listh["单价"]>5000):
A+=1
elif (listh["单价"]<15000 and listh["单价"]>10000):
B+=1
elif (listh["单价"]<20000 and listh["单价"]>15000):
C+=1
elif (listh["单价"]<25000 and listh["单价"]>20000):
D+=1
elif listh["单价"]>25000:
E+=1
else:
continue
else:
continue
x1 = ["5000-10000","10000-15000","15000-20000","20000-25000","大于25000"]
y1 = [A,B,C,D,E]
plt.bar(x1, y1)
plt.show()
输入实例:
输出实例: