爬取自如网站杭州市的租房信息

爬取自如网站杭州市的租房信息

最近看到自如网的整体网页结构比较简洁,因此尝试获取一下杭州市的租房情况,简单做一个分析。

  • 需要获取的内容如图所示

1389345-20180429105357196-700117606.jpg

1.获取网页内容
web_url='http://hz.ziroom.com/z/nl/z2.html?p=1'
#对一些需要登录的网站,如果不是从浏览器发出的请求,得不到响应,所以需要将爬虫程序发出的请求伪装成浏览器。
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
                                    'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132                                   Safari/537.36'}
req=urlrequest.Request(url=web_url,headers=headers)
web_page=urlrequest.urlopen(req).read()
content=web_page.decode('utf8') #中文解码
#print(content)
2.找到有效信息所在标签
soup=BeautifulSoup(content,'html.parser')
soup_valid=soup.find(id="houseList")
all_divs=soup_valid.find_all('li')
print(all_divs[0].prettify())
  • 获取内容的部分截图

标签截图

#符合要求的标签数量
len(all_divs)

输出:

18

3.整理标签内容
print('apartment|area|size|dis_to_subway|price')
for div in all_divs:
    apartment=div.find(class_="t1").get_text().split()[2]
    area=div.find('h4').get_text()
    size=div.find(class_="detail").find('span').get_text()
    dis_to_subway=div.find(class_="detail").find_all('span')[3].get_text()
    price=div.find(class_="price").get_text().split()[1]
    print('{},{},{},{},{}'.format(apartment,area,size,dis_to_subway,price))
  • 单页爬取结果打印

单页爬取结果

爬取杭州市所有租房信息,并存入文件的完整代码如下:
import urllib.request as urlrequest
from bs4 import BeautifulSoup
import time

start=time.clock()
web_url='http://hz.ziroom.com/z/nl/z2.html?p={}'
headers ={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
                                    'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
#把租房信息存入文件中
with open('rent_data.csv','w')as outfile:
    outfile.write('apartment,area,size,dis_to_subway,price\n')
    #一共50页
    for i in range(1,51,1):
        req=urlrequest.Request(url=web_url.format(i),headers=headers)
        web_page=urlrequest.urlopen(req).read()
        content=web_page.decode('utf8')
        #找到有效信息所在标签
        soup=BeautifulSoup(content,'html.parser')
        soup_valid=soup.find(id="houseList")
        all_divs=soup_valid.find_all('li')
        for div in all_divs:
            apartment=div.find(class_="t1").get_text().split()[2]
            area=div.find('h4').get_text()
            size=div.find(class_="detail").find('span').get_text()
            dis_to_subway=div.find(class_="detail").find_all('span')[3].get_text()
            price=div.find(class_="price").get_text().split()[1]
            outfile.write('{},{},{},{},{}\n'.format(apartment,area,size,dis_to_subway,price))
end=time.clock()
print('time cost:%.3f s' % (end-start)) #时间消耗

输出:

time cost:37.350 s

转载于:https://www.cnblogs.com/toastavocado/p/8970584.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值