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


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

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

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

    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

  • 相关阅读:
    如何遍历对象,hasOwnProperty()方法,和 in 的区别【CordeWars实践】 Pete, the baker
    去除字符串内所有空格【在CodeWars中实践】The Hashtag Generator
    JS 去掉小数点
    "写出下列代码的执行结果"一直不会做?【JS Event Loop】
    【CodeWars】Large Factorials (计算阶乘)
    去掉数组或者字符串中相邻的重复数据
    纯CSS绘制三角形(各种角度)
    3.坐标系与轴心点
    2.blender的基本操作与动画案例挑战
    CF1470E Strange Permutation
  • 原文地址:https://www.cnblogs.com/toastavocado/p/8970584.html
Copyright © 2020-2023  润新知