python爬虫实例

简单爬取链家房产网站青岛地区信息

本篇文章主要是实现一个简单的爬虫,对于新手可能会有点帮助。

信息爬取

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()

输入实例:
输入实例
输出实例:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值