zoukankan      html  css  js  c++  java
  • 爬取自如网站杭州市的租房信息

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

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

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

    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
    ')
        #一共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('{},{},{},{},{}
    '.format(apartment,area,size,dis_to_subway,price))
    end=time.clock()
    print('time cost:%.3f s' % (end-start)) #时间消耗
    

    输出:

    time cost:37.350 s

  • 相关阅读:
    JS知识点整理
    CSS3疑难问题---6、伪类和伪元素的区别
    人物志---宋霭龄
    范仁义js课程---4、js基本注意点
    legend3---24、软件更新的时候记得保留上两个版本的软件和数据
    心得体悟帖---200215(被动录课效率太低了)
    Java中迭代列表中数据时几种循环写法的效率比较
    Win10
    Java字符串的最大长度
    Android Application对象必须掌握的七点
  • 原文地址:https://www.cnblogs.com/toastavocado/p/8970584.html
Copyright © 2011-2022 走看看